根据文档here:
'|'
A|B
(其中A和B可以是任意RE)创建了一个常规 匹配A或B的表达式。任意数量的RE 可以用'|'
分隔。可以在里面使用 组(请参见下文)。扫描目标字符串时,RE 由'|'
分隔的字符从左到右尝试。当一种模式 完全匹配,则该分支被接受。这意味着一旦A 匹配,即使B会产生A,也不会对其进行进一步测试 整体比赛更长。换句话说,'|'
操作符从不 贪婪。要匹配文字'|'
,请使用\|
,或将其括在 字符类,例如[|]
。
因此,我尝试了此操作并获得了预期的结果。我的正则表达式A(a。* b)找到匹配项,因此正则表达式B(b。* e)不在结果中(尽管它将产生更长的匹配项)。
>> re.findall('a.*b|b.*e', 'abcdef')
>> ['ab']
但是,这如何工作?即使正则表达式A(b。* d)可以找到匹配项,但正则表达式B(a。* e)的结果仍在输出中。
>> re.findall('b.*d|a.*e', 'abcdef')
>> ['abcde']
这里,我不是在尝试使用正则表达式解析任何字符串,而是试图了解正则表达式的工作原理。因此,没有预期的输出或样本输出。