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

2024-06-16 09:35:22 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

您可以看到它与许多实例在现场进行匹配 http://regexr.com/3bifh

例如,赫尔曼·梅尔维尔(Herman Melville)的《白鲸》(the White Whale)或《白鲸》(the Moby Dick)中的一根弦与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中不起作用?你知道吗


Tags: the实例textrecom类型表达式white
2条回答

将捕获组转换为非捕获组。你知道吗

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

参见here,它匹配第一部分,但捕获第二部分。re.findall会优先选择捕获,然后是匹配。所以它打印出了第二部分。你知道吗

改变你的模式像打击,如果你不wznt匹配尾随空格字符。你知道吗

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

DEMO

当多个组匹配时,Regex引擎只记住最后一个组。你知道吗

你可以用这个代替

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

相关问题 更多 >