You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改Python正则表达式匹配敬称引导的完整人名?

正则匹配带敬称全名解决方案

你遇到的问题来自两个正则使用误区:

  • 原正则包含两个独立捕获组,re.findall在检测到模式中有捕获组时,会返回各组匹配结果组成的元组,而非完整匹配字符串
  • 名字部分的分组量词放在分组外侧,只会保留最后一个匹配到的名字段,无法匹配多段全名

修改方案

把内部不需要单独提取的分组改为非捕获组(语法为(?:模式)),同时调整名字匹配逻辑支持多段人名,修改后完整代码如下:

import re
# 用with上下文管理器操作文件更安全,避免资源泄漏
with open("funeral.txt", "r", encoding="utf-8") as file:
    text = file.read()

# 优化后的正则:支持Mr/Ms/Mrs/Senator等常见敬称,可匹配连续多段首字母大写的人名
honorific_names = r"(?:Mr|Ms|Mrs|Senator)\.?\s+(?:[A-Z][a-z]*[.\-']?\s?)+"
# 匹配后去除人名末尾多余的空格
result = [match.strip() for match in re.findall(honorific_names, text)]
print(result)

运行后即可得到预期输出:
['Mrs. Meghan', 'Mrs. Oprah Winfrey', 'Mr. Boris Johnson', 'Ms. Megan Specia']


内容的提问来源于stack exchange,提问作者Qunoot K

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 03:15:02