这是我的正则表达式测试字符串,
DDD001_1_2016_6TP2_1
我需要在一个捕获组中捕获DDD001_1_20 16 _ 6TP2 _1并省略下划线。我已经尝试过以下正则表达式,即使是非捕获组,我仍然无法捕获我想要的内容。
^(.*?)_.*?_\d{2}(\d{2}(?:_).*)_.*$
根据我的研究,看起来不可能通过正则表达式省略特定捕获组中的字符,它必须通过步骤2完成,例如。代码
非常感谢任何帮助。
答案 0 :(得分:2)
简而言之:你做不到。匹配总是连续的,即使它包含零宽度断言的东西,如果你想要到达后一个字符,也无法匹配下一个字符。
但是,大多数正则表达式匹配是在更广泛的编程环境的上下文中执行的,您可以使用嵌套捕获组,后续正则表达式或手动操作来过滤最后一个下划线。
答案 1 :(得分:0)
答案 2 :(得分:0)
@ZephyrPellerin所说的是正确的。
虽然不可能过滤掉下划线,但仍然可以在不同的匹配组中捕获您需要的内容,然后可以使用您使用的语言以任何方式访问它们。
这里是DEMO。
我使用的正则表达式是:(?<=_\d{2})(.+)(?=_(.+)_)
。
此处下划线之前的部分在第一个括号中捕获,之后的部分在第二个括号中。然后,如果需要,可以将它们连接起来形成一个字符串。
希望这有帮助。