正则表达式非捕获组

3

以下是我的正则表达式测试字符串,

DDD001_1_2016_6TP2_1

我需要在一个捕获组中捕获 DDD001_1_2016_6TP2_1,并省略底线。我已经尝试了下面的正则表达式,即使使用非捕获组,我仍然无法捕获我想要的内容。

^(.*?)_.*?_\d{2}(\d{2}(?:_).*)_.*$

从我的研究来看,似乎不可能通过正则表达式省略特定捕获组中的字符,必须通过步骤2完成,例如代码:

任何帮助将不胜感激。


你在使用哪种编程语言? - AKS
在应用正则表达式之前,删除所有下划线是一个选项吗?或者,使用多个捕获组可以吗? - Bohemian
3个回答

2
简而言之:你不能。即使匹配包含零宽断言等内容,匹配总是连续的,如果要到达其后面的字符,则无论如何都需要匹配下一个字符。
然而,大多数正则表达式匹配是在更广泛的编程环境中进行的,在该环境中,您可以使用嵌套捕获组、后续正则表达式或手动操作来过滤最后一个下划线。

0

@ZephyrPellerin所说的是正确的。

虽然无法过滤下划线,但仍然可以在不同的匹配组中捕获所需内容,然后以所使用的语言的方式访问这些组。

这里有一个演示

我使用的正则表达式是:(?<=_\d{2})(.+)(?=_(.+)_)

这里第一个括号中捕获了下划线之前的部分,第二个括号中捕获了下划线之后的部分。如果需要,这些部分可以连接起来形成一个字符串。

希望这能帮到你。


0
你可以选择以下方式:
(\d{2}_[a-z0-9]+)_\d+$

请查看 regex101.com上的演示(注意不同的修饰符!)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接