繁体   English   中英

使用RegEx检测11个相邻数字

[英]Detecting 11 adjacent digits with RegEx

如何使用RegEx检测11个相邻的(即11个数字,中间没有其他字符)数字?

即它应该匹配asd 12345678901 asd 11AA12345678901as

不是 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个数字的序列匹配,并且可以确保在它的前面或后面没有其他数字(但是可以是任何其他字符,例如字母,空格等)。

因此,这些字符串被认为包含匹配: jhgjad123456789011234567890112345678901skjdhkssdfjhsdf 12345678901 sdfjgj 2342 sdkfl=-=342_12345678901:}{]'

或另一种方式,无需环顾四周:

(?:\D|^)(\d{11})(?:\D|$)

11位数字将在捕获组1中。

您可以在上面的正则表达式中使用IsMatch方法,以检查字符串是否完全由11位数字组成。 您可以使用MatchMatches方法在字符串中查找一个或所有(分别)序列。

那会是

[^\d]+\d{11}[^\d]+
  1. 至少一位非数字
  2. 正好11位数
  3. 至少一位非数字

你快到了 只需确保序列前后有一个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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM