Skip to main content
 首页 » 编程设计

Python 正则表达式不匹配所有预期的单词

2025年05月04日72youxin

在 regexr.com 上,我开发了一个匹配特定类型专有名称的正则表达式。这是表达式:

\b([a-z]?[A-Z]+[\w]*[ ]*)+\b 

您可以在 http://regexr.com/3bifh

例如从字符串 Moby Dick or the White Whale by Herman Melville 匹配 Moby DickWhite WhaleHerman Melville

我试图用 Python 重现它,但不太成功。这是代码:

import re 
 
text = "Moby Dick or the White Whale by Herman Melville" 
print(re.findall(r"\b([a-z]?[A-Z]+[\w]*[ ]*)+\b", text)) 

输出是:

['Dick ', 'Whale ', 'Melville'] 

这只匹配上面每个结果的最后部分。 为什么表达式在 Python 中不起作用?

请您参考如下方法:

将捕获组转为非捕获组。

print(re.findall(r"\b(?:[a-z]?[A-Z]+[\w]*[ ]*)+\b", text)) 

参见 here ,它匹配第一部分但捕获第二部分。 re.findall 将首先优先考虑捕获,然后才是匹配。所以它打印出第二部分。

如果您不想匹配尾随空格字符,请像吹气一样改变您的模式。

r'\b[a-z]?[A-Z]+\w*(?: [a-z]?[A-Z]+\w*)+' 

DEMO