如何使用 RegEx 检测 11 个相邻(即 11 个数字之间没有其他字符)数字?
即它应该匹配asd 12345678901 asd 11
并且AA12345678901as
但不是 asd 123456789012 asd 11
因为它有 12 个相邻的数字
我试过(^[0-9])*(\d{11})(^[0-9])*
但它匹配asd 123456789012 asd 11
如何使用 RegEx 检测 11 个相邻(即 11 个数字之间没有其他字符)数字?
即它应该匹配asd 12345678901 asd 11
并且AA12345678901as
但不是 asd 123456789012 asd 11
因为它有 12 个相邻的数字
我试过(^[0-9])*(\d{11})(^[0-9])*
但它匹配asd 123456789012 asd 11
Try \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
orMatches
方法在字符串中找到一个或全部(分别)序列。
那将是
[^\d]+\d{11}[^\d]+
你快到了。只是你需要确保non-digit
在你的序列之前和之后都有一个。因此,您需要[^\d]
在两端插入不带任何量词的 a 。
你可以试试这个正则表达式: -
(?:.*?[^\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