[英]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.