使用前瞻进行正则表达式分组(在Python中)

时间:2013-04-09 07:51:19

标签: python regex lookahead

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

要匹配的字符串格式为:

/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'

分组的分组一直对我有用,但不是这次,我无法理解为什么。

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

注意:这个正则表达式的解释可以在(matching a specific substring with regular expressions using awk

中找到

1 个答案:

答案 0 :(得分:2)

小组super与小组name匹配的相同文字匹配,因为前瞻断言不会为匹配贡献任何实际字符(这就是为什么他们&#39} ;还称为&#34;零宽度断言&#34;)。

要获得所需的结果,只需删除先行断言:

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