Python 正则表达式不匹配所有预期的词
Python regular expression is not matching all expected words
在 regexr.com 我开发了一个正则表达式来匹配特定类型的专有名称。这是表达式:
\b([a-z]?[A-Z]+[\w]*[ ]*)+\b
例如来自 Herman Melville 的字符串 Moby Dick or the White Whale 它匹配 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 中不起作用?
当多个组匹配时,正则表达式引擎只记住最后一组。
您可以改用这个
print (re.findall(r"\b((?:[a-z]?[A-Z]+[\w]*[ ]*)+)\b", text))
将捕获组转为非捕获组。
print(re.findall(r"\b(?:[a-z]?[A-Z]+[\w]*[ ]*)+\b", text))
参见 here,它匹配第一部分但捕获了第二部分。 re.findall
会优先考虑捕获,然后才是匹配。所以它打印出第二部分。
如果您不想匹配尾随的 space 字符,请改变您的模式。
r'\b[a-z]?[A-Z]+\w*(?: [a-z]?[A-Z]+\w*)+'
在 regexr.com 我开发了一个正则表达式来匹配特定类型的专有名称。这是表达式:
\b([a-z]?[A-Z]+[\w]*[ ]*)+\b
例如来自 Herman Melville 的字符串 Moby Dick or the White Whale 它匹配 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 中不起作用?
当多个组匹配时,正则表达式引擎只记住最后一组。
您可以改用这个
print (re.findall(r"\b((?:[a-z]?[A-Z]+[\w]*[ ]*)+)\b", text))
将捕获组转为非捕获组。
print(re.findall(r"\b(?:[a-z]?[A-Z]+[\w]*[ ]*)+\b", text))
参见 here,它匹配第一部分但捕获了第二部分。 re.findall
会优先考虑捕获,然后才是匹配。所以它打印出第二部分。
如果您不想匹配尾随的 space 字符,请改变您的模式。
r'\b[a-z]?[A-Z]+\w*(?: [a-z]?[A-Z]+\w*)+'