You need to enable JavaScript to run this app. Python使用re.findall提取手机号报TypeError错误问题求解
优惠活动
大模型
产品
解决方案
定价
更多

Python使用re.findall提取手机号报TypeError错误问题求解

问题修正方案

报错原因分析

  • 列表l1中的元素未加引号,Python会将带-的内容识别为减法算术运算,最终得到整数类型,而re.findall()要求传入的匹配对象为字符串/字节类型,因此触发TypeError。
  • 正则表达式规则与要求不符,你编写的\d{2}-\d{3}-\d{4}是匹配开头2位数字的格式,不符合「开头3位、中间3位、末尾4位」的要求,且未加起止锚点会导致局部匹配错误。

修正后完整代码

import re
# 所有手机号改为字符串格式
l1 = ["444-122-1234", "123-122-78999", "111-123-23", "67-7890-2019"]
valid_numbers = []
# 正则调整为符合要求的规则,^匹配开头 $匹配结尾,避免局部匹配
pattern = r'^\d{3}-\d{3}-\d{4}$'
for i in l1:
    res = re.findall(pattern, i)
    if res:
        valid_numbers.append(res[0])
        print(f"符合规则的手机号:{res[0]}")
print("所有合规手机号:", valid_numbers)

运行结果说明

运行后只会匹配到444-122-1234这个符合规则的手机号,其余不符合位数要求的都会被过滤。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 03:48:03