使用正则表达式检测 11 个相邻数字
本文关键字:数字 正则表达式 检测 | 更新日期: 2023-09-27 17:56:35
如何使用正则表达式检测 11 个相邻(即 11 位数字之间没有其他字符)数字?
即它应该匹配asd 12345678901 asd 11
和AA12345678901as
但不asd 123456789012 asd 11
,因为它有 12 个相邻的数字
我试过(^[0-9])*('d{11})(^[0-9])*
但它符合asd 123456789012 asd 11
尝试 'b'd{11}'b
,它指定了 11 位数字周围的单词边界,因此您与 12 位长度的前 11 位不匹配。
你可以通过环顾四周来做到这一点:
(?<!'d)'d{11}(?!'d)
它将匹配一个正好 11 位数字的序列,您可以确定它的前面或后面没有任何其他数字(但它可以是任何其他字符,例如字母、空格等)。
所以这些字符串被认为是包含匹配项:jhgjad12345678901
、12345678901
、12345678901skjdhks
、sdfjhsdf 12345678901 sdfjgj 2342 sdkfl
、=-=342_12345678901:}{]'
或者换句话说,没有环顾四周:
(?:'D|^)('d{11})(?:'D|$)
11 位数字将位于捕获组 1 中。
您可以将IsMatch
方法与上述正则表达式一起使用,以检查字符串是否具有正好 11 位数字的序列。可以使用Match
或Matches
方法查找字符串中的一个或所有序列。
将是
[^'d]+'d{11}[^'d]+
- 至少一个非数字
- 正好 11 位数字
- 至少一个非数字
你快到了。只是您需要确保在序列之前和之后只有一个non-digit
。因此,您需要在两端插入一个没有任何量词的[^'d]
。
你可以试试这个正则表达式: -
(?:.*?[^'d]|^)'d{11}(?:[^'d].*|$)
查看演示: - http://www.myregextester.com/?r=14ad3bb5
上面的正则表达式匹配以下字符串:-
asd 12345678901 asd 11
12341234234
af23412434353 saf // 11 digits preceded by characters. I suppose you expect it to match.
并拒绝此字符串:-
asd 123456789012 asd 11