使用RegEx检测11个相邻数字

时间:2013-01-29 14:52:09

标签: c# regex string-parsing

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

即。它应与asd 12345678901 asd 11AA12345678901as

匹配

asd 123456789012 asd 11因为它有12个相邻的数字

我尝试(^[0-9])*(\d{11})(^[0-9])*,但它与asd 123456789012 asd 11匹配

4 个答案:

答案 0 :(得分:4)

尝试\b\d{11}\b,它指定了11个数字周围的单词边界,因此您不会匹配12个长度中的前11个。

答案 1 :(得分:1)

你可以通过环视来做到这一点:

(?<!\d)\d{11}(?!\d)

它将匹配一个正好11位的序列,你可以确定它前面或后面没有任何其他数字(它可以是任何其他字符,但是,如字母,空格等)

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

或者换句话说,没有环顾四周:

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

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

您可以对上述正则表达式使用IsMatch方法来检查字符串是否具有正好11位的序列。您可以使用MatchMatches方法查找字符串中的一个或全部(分别)序列。

答案 2 :(得分:0)

那将是

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

答案 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