2

我正在尝试获得一个不被任何其他数字包围且不在数字序列中的六位数字。这个数字可以存在于字符串的开头、字符串的任何位置以及结尾。它前面也可以有逗号和文本,但最重要的是不同的 6 位数字块。我已经把头发拉出来做前瞻和条件,但找不到解决所有问题的完整解决方案。

样本数据:

00019123211231731订单号 761616 BR 地址 123 A ST
订单号。760641 约翰·多伊
编号:订单 #761625
OP212312165 订单号 759699 /REC/YR 123 A ST
766911
761223,761224,761225
4

3 回答 3

4

(^|\D)(\d{6})(\D|$). 您将在捕获组 2 中找到所需的 6 位匹配。请注意,此解决方案仅对一个匹配是可靠的。它不会找到这两个数字123456,567890(谢谢艾伦指出这一点!)。如果需要多个匹配项,则应使用环视解决方案。

环顾四周:

(?<=^|\D)\d{6}(?=\D|$)

或环顾四周并且条件是有效数字(即第一个数字不是0):

(?<=^|\D)[1-9]\d{5}(?=\D|$)

于 2010-11-19T21:55:42.690 回答
2

您可以使用负后瞻负前瞻来确保匹配项附近没有数字:

(?<!\d)\d{6}(?!\d)

匹配数字,而不匹配相邻字符。
此外,如果匹配位于字符串的开头或结尾,它也可以工作。

于 2013-01-04T15:33:58.057 回答
-1

你不能轻松地使用这个正则表达式吗

[^0-9](\d{6})[^0-9]

它应该匹配任何 6 位数字,而不是由任何其他数字填充。因此不在一个序列中。

于 2010-11-21T17:55:01.623 回答