我正在尝试获取一个未被任何其他数字包围的六位数字,并且不是一系列数字。此数字可以存在于字符串的开头,其中的任何位置以及最后。它前面也可以有逗号和文字,但最重要的是6位数字块。我已经把头发拉出来做前瞻和条件,找不到解决所有问题的完整解决方案。
示例数据:
00019123211231731ORDER NO 761616 BR ADDRESS 123 A ST ORDER NO. 760641 JOHN DOE REF: ORDER #761625 OP212312165 ORDER NUMBER 759699 /REC/YR 123 A ST 766911 761223,761224,761225
答案 0 :(得分:4)
(^|\D)(\d{6})(\D|$)
。您将在捕获组2中找到所需的6位数匹配。请注意,此解决方案仅对一次匹配可靠。它不会在123456,567890
中找到这两个数字(感谢Alan指出这一点!)。如果需要多个匹配项,则应使用环视解决方案。
环顾四周:
(?<=^|\D)\d{6}(?=\D|$)
或环顾四周,条件为有效数字(即第一个数字不为0):
(?<=^|\D)[1-9]\d{5}(?=\D|$)
答案 1 :(得分:2)
您可以使用负面反对和负面预测来确保匹配项旁边没有数字:
(?<!\d)\d{6}(?!\d)
此仅匹配数字,而不是相邻的字符 此外,如果匹配位于字符串的开头或结尾,它也可以使用。
答案 2 :(得分:-1)
难道你不能轻易使用这个正则表达式
[^0-9](\d{6})[^0-9]
它应该匹配任何6位数字,而不是任何其他数字填充。因此不是顺序。