我想捕获字符串的特定部分,其中有替代的 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/