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

Python re正则提取姓名手机号时输出格式不符预期如何解决

代码修改方案

现有代码问题

  • 直接打印re.findall()返回的列表对象,输出会自带列表的方括号、引号格式,没有取出实际的字符串内容
  • 正则规则存在缺陷:\w*会匹配空字符串,容易产生无效匹配结果
  • 没有对匹配到的内容做格式化输出处理,无法实现「姓名独占一行加冒号、下属号码逐行展示」的层级结构
  • 原代码末尾存在引号转义导致的语法错误

修改后可直接运行的代码

import re

# 适配示例数据的正则规则,避免无效匹配
phone_pattern = r'\d{3}-\d{3}-\d{4}'
name_pattern = r'^[A-Za-z]+$'

with open('records.txt', 'r') as f:
    for line in f:
        # 先清除每行首尾的换行、空白字符,避免干扰匹配
        line_content = line.strip()
        # 优先匹配整行是姓名的情况
        name_res = re.fullmatch(name_pattern, line_content)
        if name_res:
            print(f"{name_res.group()}:")
            continue
        # 匹配当前行的电话号码,逐个打印纯字符串
        phone_list = re.findall(phone_pattern, line_content)
        for phone in phone_list:
            print(phone)

实现效果

运行代码后会直接输出你期望的纯字符串格式:

John:
222-333-4447
423-444-5678
123-455-1223
Paul:
423-444-5778

如果实际文本里姓名包含空格、特殊字符,或者电话号码格式有变化,对应调整name_pattern和phone_pattern的正则规则即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 13:18:18