0

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

即它应该匹配asd 12345678901 asd 11并且AA12345678901as

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

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

4

4 回答 4

4

Try \b\d{11}\b,它指定围绕 11 位数字的单词边界,因此您不匹配 12 位长度的前 11 位。

于 2013-01-29T14:54:49.383 回答
1

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

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

它将匹配正好 11 位数字的序列,并且您可以确定它的前面或后面没有任何其他数字(不过,它可以是任何其他字符,例如字母、空格等)。

所以这些字符串被认为包含一个匹配:jhgjad12345678901, 12345678901, 12345678901skjdhks, sdfjhsdf 12345678901 sdfjgj 2342 sdkfl,=-=342_12345678901:}{]'

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

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

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

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

于 2013-01-29T15:04:54.460 回答
0

那将是

[^\d]+\d{11}[^\d]+
  1. 至少一个非数字
  2. 正好 11 位数字
  3. 至少一个非数字
于 2013-01-29T14:55:39.020 回答
0

你快到了。只是你需要确保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
于 2013-01-29T14:58:38.400 回答