我正在尝试创建一个正则表达式来匹配 6 或 7 位长的数字字符串。
[0-9]{6,7} 这可行,但我不希望匹配长度超过 7 位数字的字符串。
请参阅下面的示例数据,其中我需要匹配的粗体数字。一些 6-7 位字符串的开头和结尾有各种字符(换行符、制表符、空格),我也不想匹配开头有两个或多个 0 的字符串。
1139055 _00000000000000.jpg 1139065 _00000000000000.jpg
12345678 1045977 _00000000000000.jpg
_ 1162679 .jpg ID:1099695 _20230615142941.jpg 1099692 _20230615142939.jpg 1162700 _00000000000000.jpg 012456 .psd 标题:0582457 _00_CC 012 3456789 标题: 6844393 _50_v2 标题:6844393 _50_v2.psd 0001456789 0000001546800000
总计:14 6582457 _00_C 5142090 _00_c ID:1178287标题:6582457 _00_CC 标题:6844393 _50_v2 ID:1178288标题:_0042090_00_cc __ 6771292 _00_cc
任何帮助表示赞赏。
这个正则表达式似乎可以为您的示例完成工作:
(?:[^0-9]|^) :确保其行首或前面的字符不是数字
((?:0[1-9]|[1-9]0|[1-9]{2})[0-9]{4,5}) :获取开头不带00的6-7位
(?:[^0-9]|$) :确保行尾或后面的字符不是数字
你可以在https://regex101.com/r/scZc9q/1上玩它
由于第一个/最后一个字符将在匹配的字符串中,因此使用 grep 最简单的方法是使用 sed 删除这些字符:
因此,总而言之,您想要匹配两个十进制数字,其中至少一个必须非零,后跟另外四到五个十进制数字,而不是前面或后面有其他数字?
如果是这样,请在 PCRE 模式下使用 GNU grep 进行查找:
使用以下命令测试您的输入
-o
: