在regexr.com我开发了一个正则表达式来匹配特定类型的专有名称。以下是表达式:
\b([a-z]?[A-Z]+[\w]*[ ]*)+\b
您可以看到它与许多实例在现场进行匹配 http://regexr.com/3bifh
例如,赫尔曼·梅尔维尔(Herman Melville)的《白鲸》(the White Whale)或《白鲸》(the Moby Dick)中的一根弦与Moby Dick
、White Whale
和Herman 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中不起作用?你知道吗
将捕获组转换为非捕获组。你知道吗
参见here,它匹配第一部分,但捕获第二部分。
re.findall
会优先选择捕获,然后是匹配。所以它打印出了第二部分。你知道吗改变你的模式像打击,如果你不wznt匹配尾随空格字符。你知道吗
DEMO
当多个组匹配时,Regex引擎只记住最后一个组。你知道吗
你可以用这个代替
相关问题 更多 >
编程相关推荐