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

标签 python regex regex-lookarounds

我正在修改正则表达式以提取一组组匹配项,但此“ 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/

相关文章:

regex - R 在除特定单词外的所有单词周围放置引号

python - 压缩 Django 迁移时的循环依赖

python - python 中的字典和文件

java - 正则表达式匹配后查找第一个单词

ios - swift 正则表达式 : Replace Lowercase Followed by Uppercase

正则表达式先行匹配关键字并排除前面的特定模式

python - 使用 python 定义网络请求超时

python - 在 python 中计算体积或表面积的好算法

regex - 如果否则失败的正则表达式

java - Android 2.1 中的正则表达式负向预测