如果符合特定条件,则正则表达式从第二个捕获组中排除

Regex to exclude from second capture group if matches certain criteria

到目前为止我的正则表达式是:

^(UCX_|UBX_|USP_)([A-Za-z0-9]\w+)(_\d+)?$

当我测试字符串时:

UCX_1maxi_holiday2_blah_343

测试正确,但我的最后一个捕获组将永远无法访问,因为它也与第二个组匹配。 即,如果最后一个下划线分隔的部分是所有数字,我希望第三个捕获组中的该部分而不是第二个。否则我想在第二组。

我考虑过前瞻和后视,但我认为它们不会为此工作,但我可能会感到惊讶。

我可以做一个单独的测试来单独检查字符串的结尾,然后根据需要拆分字符串但出于求知欲。

我想知道是否有办法修改第二个捕获组以阻止它在全是数字的情况下破坏结尾

有人为此准备了正则表达式柔术吗?

如果你把第二次捕获改成非贪婪的,你就会得到你想要的。 使用:

^(UCX_|UBX_|USP_)([A-Za-z0-9]\w+?)(_\d+)?$

您可以简化操作:

^(UCX_|UBX_|USP_)(\w+?)(_\d+)?$

\w character is a character from a-z, A-Z, 0-9, including the _ (underscore) character.