小编use*_*855的帖子

在正则表达式中使用组时 re.findall() 和 re.finditer() 之间的区别?

考虑以下字符串

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)

python regex text regex-group

1
推荐指数
1
解决办法
1403
查看次数

标签 统计

python ×1

regex ×1

regex-group ×1

text ×1