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

Python正则提取混杂文本姓名并转换为标准名前姓后格式问题

混杂文本中姓名提取与格式标准化方案

核心需求

  • 从混杂电话号码的无规则字符串中提取所有姓名,统一调整为名 姓的标准顺序
  • 处理过程需完整保留Dr.、Rev.等头衔前缀,以及中间名、姓名缩写内容
  • 初步正则提取的结果中,部分姓名为「姓, 名」的倒置格式,需通过后处理修正顺序

参考材料

  • 待处理原始字符串:
s = "555-1239Dr. Bernard Lander(636) 555-0113Hollingdorp, Donnatella555-6542Fitzgerald, F. Scott555 8904Rev. Martin Luther King636-555-3226Snodgrass, Theodore5553642Carlamina Scarfoni"
  • 初步提取代码:
import re
Title = r"(?:[A-Z][a-z]*\.\s*)?"
Name1 = r"[A-Z][a-z]+,?\s+"
Middle = r"(?:[A-Z][a-z]*\.?\s*)?"
Name2 = r"[A-Z][a-z]+"
raw_names = re.findall(Title + Name1 + Middle + Name2, s)
  • 初步提取结果:
['Dr. Bernard Lander', 'Hollingdorp, Donnatella', 'Fitzgerald, F. Scott', 'Rev. Martin Luther King', 'Snodgrass, Theodore', 'Carlamina Scarfoni']
  • 目标输出要求:倒置的「姓, 名」格式调整为正序,其余内容完整保留

实现方案

原有正则已经可以准确从混杂文本中提取出完整姓名,仅需要对提取结果做简单后处理即可:识别带逗号的倒置姓名,拆分后将逗号后的名/中间名部分提前,逗号前的姓氏移动到末尾即可,无需修改原有提取正则。

完整可运行代码:

import re

def process_names(input_str):
    # 沿用原有成熟的正则提取逻辑
    Title = r"(?:[A-Z][a-z]*\.\s*)?"
    Name1 = r"[A-Z][a-z]+,?\s+"
    Middle = r"(?:[A-Z][a-z]*\.?\s*)?"
    Name2 = r"[A-Z][a-z]+"
    raw_names = re.findall(Title + Name1 + Middle + Name2, input_str)

    result = []
    for name in raw_names:
        # 先分离头衔(如果存在),避免头衔干扰格式判断
        title_match = re.match(r"^([A-Z][a-z]*\.\s+)", name)
        title = title_match.group(1) if title_match else ""
        name_body = name[len(title):]

        if "," in name_body:
            # 倒置格式:拆分姓和名部分,重组为正序
            last_name, first_middle = name_body.split(",", 1)
            fixed_name = f"{first_middle.strip()} {last_name.strip()}"
            result.append(title + fixed_name)
        else:
            # 原本就是正序格式,直接保留
            result.append(name)
    return result

# 测试运行
s = "555-1239Dr. Bernard Lander(636) 555-0113Hollingdorp, Donnatella555-6542Fitzgerald, F. Scott555 8904Rev. Martin Luther King636-555-3226Snodgrass, Theodore5553642Carlamina Scarfoni"
print(process_names(s))

运行结果

['Dr. Bernard Lander', 'Donnatella Hollingdorp', 'F. Scott Fitzgerald', 'Rev. Martin Luther King', 'Theodore Snodgrass', 'Carlamina Scarfoni']

说明:输出中F. Scott Fitzgerald为通用标准姓名顺序,若需调整为指定的特殊顺序,仅需修改倒置姓名拆分后的拼接规则即可。

内容的提问来源于stack exchange,提问作者Adita Rita

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 18:57:25