Python使用正则表达式判断一串数字是否位中国手机号或座机号

该篇文章介绍了如何使用Python中的re模块编写正则表达式,实现对中国手机号(13-19开头)和座机号码(可能包含区号)的识别与清理,提供了`identify_and_clean_phone_number`函数作为示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

import re


# ^(\+86)? 表示+86为可选
# 1[356789] 表示中国的手机号为13、15、16、17、18、19开头
# \d{9} 表示9位数字,因为前面已经有13、15、16、17、18或19了,所以这里是9
# (\d{3,4}-)? 表示区号,也是可选的
# \d{7,8} 表示7至8位座机号码
# 正则表达式可以使用括号进行分组,一对括号为一组

def identify_and_clean_phone_number(input_string):
    # 判断是否为中国手机号
    mobile_pattern = re.compile(r'^(\+86)?1[356789]\d{9}$')

    # 判断是否为中国座机号(假设区号3-4位,电话号码7-8位)
    landline_pattern = re.compile(r'^(\+86)?(\d{3,4}-)?\d{7,8}$')

    mo = mobile_pattern.match(input_string)
    if mo:
        # 获取匹配到的字符串,去掉前缀 "+86"
        matched_string = mo.group()[3:] if mo.group(1) else mo.group()
        return "中国手机号码", matched_string

    mo = landline_pattern.match(input_string)
    if mo:
        # 获取匹配到的字符串,去掉前缀 "+86"
        matched_string = mo.group()[3:] if mo.group(1) else mo.group()
        return "中国座机号码", matched_string

    return "未知类型", input_string


# 示例用法
phone_number1 = "+8613345678901"
phone_number2 = "021-12345678"

result1_type, result1_matched = identify_and_clean_phone_number(phone_number1)
result2_type, result2_matched = identify_and_clean_phone_number(phone_number2)

print(f"{phone_number1}{result1_type},匹配的字符串是 {result1_matched}")
print(f"{phone_number2}{result2_type},匹配的字符串是 {result2_matched}")


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Dustin.Hoffman

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值