python - 在 Python 中使用 Regex 从 OR 运算符捕获替代字符串?

标签 python regex

我想捕获字符串的特定部分,其中有替代的 Regex 分支。我怎样才能安全地引用替代路径中定义的点。我想过做

m=re.match("(A(?P<name>.+)B|C(?P<name>.+)D)", text)
match=m.group("name")

但是重新定义名字有冲突。通过索引使用 m.group 会很麻烦,因为这些正则表达式来自配置文件,我无法保证会导致匹配的嵌套级别/索引值。

编辑: 在设置中,有来自不同来源的要匹配的文本和正则表达式。我想实现

import re

for text in ["ABBC", "DEEEF", "GHHI"]:
    for regex in ["(A(.+)C|D(.+)F)", "G(.+)I"]:
        m=re.match(regex, text)
        if m:
            print(m.group(1)) # should actually match the middle characters, but doesn't work generally
            break

future 可能的正则表达式的数量会增加,所以它必须是一个通用的解决方案

最佳答案

一个可能的解决方案是使用先行断言。如果将 (A(.+)C|D(.+)F) 正则表达式替换为

^(?=A.+C$|D.+F$)[A-Z](.+)[A-Z],那么 group(1) 将一般匹配中间字符。

它说:如果您在字符串 (^) 的开头并且 (?=...) 中的一个先行断言成功,则匹配 [A-Z](.+)[A-Z] 字符串。

关于python - 在 Python 中使用 Regex 从 OR 运算符捕获替代字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27377223/

相关文章:

python - 使用子进程时如何在 Python 中复制 tee 行为?

python - Fillna 一次使用多种方法 - pandas

python - Pandas 的性能问题和日期时间列的过滤

python - Python的随机性的随机性

python - 使用 bool AND 计算行中字符串的出现次数

java - 只允许正数或空格

java - 通过正则表达式搜索和替换文本段落中的管道分隔字符

regex - bash中冒号后的正则表达式提取字符串

css - 对 LESS replace() 函数行为感到困惑

java - 在这些行中查找特定模式的正确正则表达式是什么?