繁体   English   中英

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

[英]Catch alternative strings from OR operator with a Regex in Python?

我想抓住一些字符串,其中有另外的正则表达式分支。 如何安全地引用替代路径中的已定义点。 我想过要做

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

可能的正则表达式的数量可以在未来增长,因此它必须是一般解决方案

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

^(?=A.+C$|D.+F$)[AZ](.+)[AZ] ,则group(1)通常匹配中间字符。

它说:如果你在一个字符串( ^ )的开头,并且(?=...)一个前瞻断言成功,则匹配[AZ](.+)[AZ]字符串。

您的示例可以通过更改来实现

            print(m.group(1))

            print(filter(None, m.groups())[0])

(只需取出包含匹配的组)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM