正则表达式只捕获2位数的字符串

时间:2018-03-09 14:37:45

标签: regex

我搜索过类似的问题,即使我找到了几个答案,也没有任何接缝可以使用。我有一个字符串列表

Z189
I142
M395
L210
V467
M203
Q277
Q461
Y440
S250
M162
Q96
22Q
W148
Q72
T22T
22TWE22
12E34

我需要一个正则表达式来查找只包含2位数字(不多或少)的字符串。所以在这种情况下:

Q96, 22Q, Q72, T22T

我失败的尝试包括:

\D\d{2}\D
(?<!\d)\d{2}(?!\d)

4 个答案:

答案 0 :(得分:5)

您可以使用^\D*(\d)\D*(\d)\D*$

\D*确保您的第一个数字之前的任何内容都不是另一个数字。

(\d)会抓住您的第一个数字。

\D*确保您的两位数字之间没有其他数字。

(\d)抓住你的第二个数字。

\D*确保您的第二个数字后的任何内容都不是另一个数字。

答案 1 :(得分:2)

这很有效。请注意globalmultiline标记。

/^[a-zA-z]\d{2}[a-zA-Z]*$/gm

说明:行首 - &gt;信 - &gt;正好两位数 - &gt;零个或多个字母 - &gt;行尾

答案 2 :(得分:2)

要匹配任何位置只包含2位数的字符串,您可以使用

^\D*(?:\d\D*){2}$

请参阅regex demo

<强>详情

  • ^ - 字符串开头
  • \D* - 数字以外的任何0 +字符
  • (?:\d\D*){2} - 重复2次:
    • \d - 数字
    • \D* - 数字以外的任何0 +字符
  • $ - 字符串结束。

答案 3 :(得分:2)

你没有提到数字是否必须是连续的,但是你的所有例子都是这样的。以下RegEx仅匹配包含两个连续数字的行:

^\D*\d{2}\D*$

说明:

  • ^匹配字符串的开头
  • \D*匹配任何非数字零次或多次
  • \d{2}正好匹配两位数字
  • \D*匹配任何非数字零次或多次
  • $匹配字符串
  • 的结尾

小提琴:Live Demo