我正在修改正则表达式以提取一组组匹配项,但此“ super 组”未按预期返回复合匹配字符串。
要匹配的字符串的形式为:
/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 ) 中找到
最佳答案
组 super
与组 name
匹配的文本相同,因为先行断言不会为匹配贡献任何实际字符(这就是为什么它们是也称为“零宽度断言”)。
要获得所需的结果,只需删除前瞻断言:
/DIR/
(?P<super>
(?P<name>.*?)
(?P<modifier>-W\d\.\d{2}[+-]\d{3})?\.(?P<extension>raw\.gz|root)$
)
关于python - 使用前瞻进行正则表达式分组(在 Python 中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15896275/