Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用Python中的正则表达式从OR运算符捕获可选字符串?_Python_Regex - Fatal编程技术网

用Python中的正则表达式从OR运算符捕获可选字符串?

用Python中的正则表达式从OR运算符捕获可选字符串?,python,regex,Python,Regex,我想捕捉字符串的某一部分,其中有可选的正则表达式分支。如何安全地引用备选路径中定义的点。我想做些什么 m=re.match("(A(?P<name>.+)B|C(?P<name>.+)D)", text) match=m.group("name") 将来可能的正则表达式的数量可能会增加,因此它必须是一个通用的解决方案一个可能的解决方案是使用前瞻断言。如果将(A(+)C | D(+)F)正则表达式替换为 ^(?=A.+C$| D.+F$)[A-Z](.+)[A-Z],则组

我想捕捉字符串的某一部分,其中有可选的正则表达式分支。如何安全地引用备选路径中定义的点。我想做些什么

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

将来可能的正则表达式的数量可能会增加,因此它必须是一个通用的解决方案

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

^(?=A.+C$| D.+F$)[A-Z](.+)[A-Z]
,则
组(1)
通常将匹配中间字符


它说:如果您位于字符串(
^
)的开头,并且
(?=…)
中的一个前瞻断言成功,则匹配
[a-Z](.+)[a-Z]
字符串。

您的示例可以通过更改

            print(m.group(1))


(只需选取包含匹配项的组即可)。

我不确定您可以和不能从代码中更改哪些内容。从您在上一个答案上留下的评论来看,似乎您无法更改正则表达式?我可以为正则表达式定义所需的语法。但即便如此,还是有多个独立的正则表达式,很难像答案中所建议的那样可靠地生成一个巨大的正则表达式?我认为一个可能的解决方案是使用。不确定是否错过了标准方式…使用
re.findall
如何?这样你就可以得到一个匹配列表,我想你可以过滤掉你将得到的空字符串。否则,
regex
模块确实是一个解决方案,您可以使用相同的命名组。
            print(m.group(1))
            print(filter(None, m.groups())[0])