我需要一个正则表达式来查找连续 8 个数字组成的组。我得到的最接近的是:
[0-9]{8}
但这并不完全是我所需要的。如果我有一个长度为 9 的数字,它将匹配前 8 个数字,但如果它比 8 长或短,我希望它忽略它。
这里有一些例子
1234567890 <- no match, it's longer than 8
12345678 <- match: "12345678"
1234567809876543 <- match 1: "12345678", match 2: "09876543" (two groups of 8)
,,111-11-1234,12345678, <- match: "12345678"
总而言之,每组恰好有 8 个数字组成匹配。
我正在处理 OCR(光学字符识别)的一些结果,并且我必须处理这些结果的缺点,因此我的输入可以像上面的示例中那样有所不同。
这是一些用例数据:http://pastebin.com/uijF9K9n
最佳答案
您可以在 .NET 中使用以下正则表达式:
(?<=^|\D|(?:\d{8})+)\d{8}(?=$|\D|(?:\d{8})+)
参见 regex demo
它基于可变宽度后向查找和先行查找。
正则表达式分割:
-
(?<=^|\D|(?:\d{8})+)
- 仅当位于字符串开头 (^
),或前面没有数字 (\D
) 或 1 个或多个 8 位数字序列 ((?:\d{8})+
)... -
\d{8}
- 匹配后面跟着的 8 位数字... -
(?=$|\D|(?:\d{8})+)
- 字符串末尾 ($
) 或不是数字 (\D
) 或 1 个或多个 8 位数字序列 ((?:\d{8})+
)。
重要:
如果与另一个答案相比,我因“额外”复杂性而投了反对票,请注意我们的解决方案不同: my regex matches 8-digit number in ID12345678
和 the other one does not 由于单词边界而不同。
关于c# - 使用正则表达式多次查找精确长度匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33745957/