我正在修改正则表达式以提取一组组匹配,但是这个“超级组”不会按预期返回复合匹配字符串。
要匹配的字符串格式为:
/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)
中找到答案 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)$
)