我搜索过类似的问题,即使我找到了几个答案,也没有任何接缝可以使用。我有一个字符串列表
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)
答案 0 :(得分:5)
您可以使用^\D*(\d)\D*(\d)\D*$
\D*
确保您的第一个数字之前的任何内容都不是另一个数字。
(\d)
会抓住您的第一个数字。
\D*
确保您的两位数字之间没有其他数字。
(\d)
抓住你的第二个数字。
\D*
确保您的第二个数字后的任何内容都不是另一个数字。
答案 1 :(得分:2)
这很有效。请注意global
和multiline
标记。
/^[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