如何使用RegEx检测11个相邻(即11位数字之间没有其他字符)数字?
即。它应与asd 12345678901 asd 11
和AA12345678901as
但不 asd 123456789012 asd 11
因为它有12个相邻的数字
我尝试(^[0-9])*(\d{11})(^[0-9])*
,但它与asd 123456789012 asd 11
匹配
答案 0 :(得分:4)
尝试\b\d{11}\b
,它指定了11个数字周围的单词边界,因此您不会匹配12个长度中的前11个。
答案 1 :(得分:1)
你可以通过环视来做到这一点:
(?<!\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
方法查找字符串中的一个或全部(分别)序列。
答案 2 :(得分:0)
那将是
[^\d]+\d{11}[^\d]+
答案 3 :(得分:0)
你快到了。只需要确保在序列之前和之后只有一个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