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
相关产品推荐
相关产品推荐

