Regex 正则表达式匹配前3个数字

Regex 正则表达式匹配前3个数字,regex,Regex,我想匹配字符串中出现的前3位数字,如下所示: input match DC-9-83(MD-83) 983 B-145LR 145 DC-9-31 931 PA-28-180 281 737-600 737 我使用了\d{3},它连续获取前3个数字,但忽略像DC-9-31这样的字符串,因为无法通过匹配操作获得单个匹配中不相交的文本部分,所以需要两个步骤:1)提取包含

我想匹配字符串中出现的前3位数字,如下所示:

input               match
DC-9-83(MD-83)      983
B-145LR             145
DC-9-31             931
PA-28-180           281
737-600             737

我使用了
\d{3}
,它连续获取前3个数字,但忽略像
DC-9-31

这样的字符串,因为无法通过匹配操作获得单个匹配中不相交的文本部分,所以需要两个步骤:1)提取包含三个数字的第一个块,2)然后删除所有不是数字的字符

以下内容提取了前三位数字:

^\D*(\D(?:\D*\D){2})
或者,如果您使用的方法仅提取第一个匹配项(如
re.search
Series.str.extract

(\d(?:\d*\d){2})
或者,您可以使用regex replace方法(在某些情况下,它使生活更轻松):

^\D*(\D(?:\D*\D){2})*
并替换为对组1的反向引用(
$1
\1
,具体取决于正则表达式的风格)。 然后,只需使用
\D+
/
[^0-9]+
模式删除非数字即可

var测试=['DC-9-83(MD-83)''B-145LR','DC-9-31','PA-28-180','737-600'];
var regex=/\d(?:\d*\d){2}/;
对于(测试的var s){
console.log((s.match(regex)| |[''])[0]。替换(/\D+/g');

}
无法在单个匹配中获得不相交的文本部分。您需要两个步骤:1)使用
\d(?:\d*\d){2}
进行提取,然后使用某种正则表达式替换为
\d+
模式,以及空字符串替换。