使用正则表达式检测 11 个相邻数字

本文关键字:数字 正则表达式 检测 | 更新日期: 2023-09-27 17:56:35

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

即它应该匹配asd 12345678901 asd 11AA12345678901as

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

我试过(^[0-9])*('d{11})(^[0-9])*但它符合asd 123456789012 asd 11

使用正则表达式检测 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