正则表达集团重组

时间:2014-09-03 15:18:39

标签: regex

我输入的数据如下:

AB
AB_Test
AB_Test123

预期产出:

AB
AB_Test

我有匹配的正则表达式:

    ([A-Z]{2})(_([a-zA-Z]*))?

Regular expression visualization

Debuggex Demo

因此,从上面的正则表达式,我得到$ 1&的字符串$ 3,我想修改正则表达式,使字符串在$ 1& $ 2(从正则表达式中省略第2组)。

现在我想使用该组处理匹配的字符串。这就是为什么我希望它按顺序排列。

我们是否有办法改变上述正则表达式?

2 个答案:

答案 0 :(得分:2)

如果您尝试消除具有数字的字符串,请使用否定前瞻断言:

^([A-Z]{2})(?!.*\d.*)(?:_([A-Za-z]*))?

Demo

或者在字符串的两端添加锚点:

^([A-Z]{2})(?:_([A-Za-z]*))?$

Demo 2

如果您使用锚点,如果您有多线目标,则需要使用m标记。

答案 1 :(得分:1)

您需要将非捕获组用于您不想要的组:

^([A-Z]{2})(?:_([a-zA-Z]*))?$

编辑:我还添加了开始和结束锚点,因为只有当下划线后的字符都是字母时,您似乎才想匹配该行。