考虑以下字符串
text2 = '''
Mr. Schafer
Mr Smith
Ms Davis
Mrs. Robinson
Mr. T
'''
Run Code Online (Sandbox Code Playgroud)
我希望正则表达式能够匹配完整的姓名,例如“先生”。以谢弗为例
使用 finditer():
matches = re.finditer(r'(Mr|Ms|Mrs)\.?\s[A-Z]\w*', text2)
for match in matches:
print(match)
Run Code Online (Sandbox Code Playgroud)
结果:
<_sre.SRE_Match object; span=(1, 12), match='Mr. Schafer'>
<_sre.SRE_Match object; span=(13, 21), match='Mr Smith'>
<_sre.SRE_Match object; span=(22, 30), match='Ms Davis'>
<_sre.SRE_Match object; span=(31, 44), match='Mrs. Robinson'>
<_sre.SRE_Match object; span=(45, 50), match='Mr. T'>
Run Code Online (Sandbox Code Playgroud)
finditer() 给出了我想要的结果,但不在列表中。
但是当我使用 findall() 时:
re.findall(r'(Mr|Ms|Mrs)\.?\s[A-Z]\w*', text2)
Run Code Online (Sandbox Code Playgroud)
结果:
['Mr', 'Mr', 'Ms', 'Mrs', 'Mr']
Run Code Online (Sandbox Code Playgroud)
为什么是这样?如何使用 findall() 获得我想要的结果
我想要这个结果:
['Mr. Schafer', 'Mr Smith', 'Ms …Run Code Online (Sandbox Code Playgroud)