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

标签 python regex

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

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

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

最佳答案

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

相反,在输入字符串的每个位置都会考虑每个备选方案。所以在位置 0,eaglecat 都不匹配,但在位置 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'

关于python - 为什么正则表达式交替 (A|B) 不按照文档匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30237604/

相关文章:

python - Flask 重定向后的 Twilio MessagingResponse()

python - 使用 5 倍交叉验证时,在高度不平衡的数据中混淆 F1 分数 和 AUC 分数

regex - 我应该使用什么命令行工具使用复杂的正则表达式从文件中提取字符串

regex - 正则表达式中带等号的问号

python - Pandas :如何在数据框列中找到特定模式?

Python PLY解析: definition scope

python - pandas:根据过去 4 周获取一周中一天的平均销售额

c# - C#中段落编号的正则表达式

python - 使用正则表达式以逗号分隔南亚编号系统中的大量数字

regex - 语言标签的正则表达式(由 BCP47 定义)