1

我正在修改正则表达式以提取一组组匹配,但是这个“超级组”没有按预期返回复合匹配字符串。

要匹配的字符串的格式为:

/DIR/SOMESTRING-W0.12+345.raw.gz

和我正在使用的正则表达式:

/DIR/
(?P<super>
    (?P<name>.*?)
    (?=(?P<modifier>-W\d\.\d{2}[+-]\d{3})?\.(?P<extension>raw\.gz|root)$)
)

我得到命名组的以下结果:

modifier: '-W0.12+345'
super: 'SOMESTRING'
name: 'SOMESTRING'
extension: 'raw.gz'

在我期待的时候

super: 'SOMESTRING-W0.12+345.raw.gz'

子组的分组一直对我有用,但这次不行,我不明白为什么。

希望有人能给我一些提示。

注意:此正则表达式的解释可以在(使用 awk 将特定子字符串与正则表达式匹配)中找到

4

1 回答 1

2

该组super匹配该组匹配的相同文本name,因为前瞻断言不会为匹配贡献任何实际字符(这就是它们也被称为“零宽度断言”的原因)。

要获得所需的结果,只需删除前瞻断言:

/DIR/
(?P<super>
    (?P<name>.*?)
    (?P<modifier>-W\d\.\d{2}[+-]\d{3})?\.(?P<extension>raw\.gz|root)$
)
于 2013-04-09T07:55:36.063 回答