2017-06-22 18 views
0

我有两个例子提取组

abc 34 def12 ghi 
abc 34 33 ghi 

和正则表达式

^.*?([0-9]{2}) ?([a-z]{2,3})? ?([0-9]{2}).*$ 

(见https://regex101.com/r/U2JNaS/1

我需要修改它以这样的方式来提取$1,$2, $3但是只有当$2存在时,即我需要它返回

34 def12 
<WRONG> 

如何实现这一目标?

+0

@anubhava对不起,我没说清楚:如果没有匹配,替换函数会给我所有的东西,我的意思是第二个例子不匹配(编辑)。 – Tim

+1

然后使第二个非可选为:['^。*?([0-9] {2})\ s *([az] {2,3})\ s *([0-9] {2} )。* $'](https://regex101.com/r/U2JNaS/2) – anubhava

回答

0

请注意,您在第二个捕获组(([a-z]{2,3}))之后放置了一个?

即使特定行不包含“字母”部分,它也会导致整个正则表达式匹配。

只删除这个?,所以在这种情况下,整个正则表达式将不匹配。