Skip to main content
 首页 » 编程设计

python之为什么正则表达式交替 (A|B) 不按照文档匹配

2025年05月04日24傻小

当我在 python 2.7 中运行以下语句时,

re.search('eagle|cat', 'The cat is an animal. The eagle is bird').group() 

我希望看到 'eagle' 作为正则表达式文档的结果 但是我得到了 'cat'。我在这里遗漏了什么吗?

请您参考如下方法:

具有替代模式(由 | 分隔)的正则表达式不会扫描整个字符串以查找第一个替代项,然后再扫描第二个。

相反,在输入字符串的每个位置都会考虑每个备选方案。所以在位置 0,eagle 和 cat 都不匹配,但在位置 4,cat 匹配,即使 eagle首先尝试。

因此,cat 作为匹配返回;字符串的其余部分不再需要考虑。

当两个 模式在同一位置匹配 时,替代顺序很重要。所以 cat|cats 将始终返回 cat,即使在输入字符串中的那个词之后有一个 s:

>>> import re 
>>> re.search('cat|cats', 'Like herding cats.').group() 
'cat' 
>>> re.search('cats|cat', 'Like herding cats.').group() 
'cats'