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

Python正则处理姓名文件:如何为不合规姓名返回指定格式None

Python正则提取完整姓名并处理异常格式问题

问题描述

需求:使用Python读取regex_test.txt文件,通过正则表达式与分组提取每行的完整姓名,对于无完整姓名或大小写格式不规范的条目,需返回格式为“None (原内容)”的结果。

预期输出

Abraham Lincoln
Andrew P Garfield
Connor Milliken
Jordan Alexander Williams
None (Madonna)
None (programming is cool)

现有代码问题

运行当前代码后仅排除最后两行,无法输出预期的“None (原内容)”格式,同时代码存在语法错误与逻辑缺陷。


修改后的代码

import re

# 正确读取文件并处理每行的换行符
with open("regex_test.txt") as names:
    name_lines = [line.strip() for line in names.readlines()]

# 定义匹配完整姓名的正则规则:名+(中间名/缩写)+姓,各部分首字母大写
name_pattern = re.compile(r'^[A-Z][a-z]+(?: [A-Z][a-z]*|[A-Z])+ [A-Z][a-z-]+$')

for line in name_lines:
    match_result = name_pattern.match(line)
    if match_result:
        print(match_result.group())
    else:
        # 按照要求格式输出异常条目
        print(f"None ({line})")

关键修改说明

  • 修复文件读取语法错误:将文件读取逻辑放入with代码块内(原代码未缩进导致无法正确读取),同时用列表推导式去除每行末尾的换行符,避免输出空行。
  • 优化正则匹配规则:新正则确保匹配“首字母大写的名字 + 可选的中间名/大写缩写 + 首字母大写的姓氏”的完整结构,排除单名、格式错误的姓名及非姓名内容。
  • 修正变量引用错误:原代码中if match:的match变量未定义,改为判断正则匹配结果match_result。
  • 实现指定错误输出格式:将原本输出None改为print(f"None ({line})"),直接拼接原内容生成符合要求的字符串。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 06:30:54