提取手机号从文档中

文章介绍了如何使用Python的re模块和正则表达式来有效地从文本中提取中国大陆的手机号码,同时避免匹配到非手机号的长数字串。提供的函数通过删除文本中的括号、空格和连字符,然后匹配11位数字的模式来实现这一功能。
摘要由CSDN通过智能技术生成
import re

def extract_phone_numbers(text):
    # 中国手机号正则表达式
    pattern = r"(?<!\d)(1[3-9]\d{9})(?!\d)"
    # 提取出所有匹配项
    phone_numbers = re.findall(pattern, text)
    return phone_numbers

text = "张三的手机号码是13800138000,李四的手机号码是13988889999。"
phone_numbers = extract_phone_numbers(text)
print(phone_numbers)  # 输出:['13800138000', '13988889999']


# maybe a  better version 
def extract_phone_numbers(text):
    text = re.sub(r"[\(\)\s-]+", "", text)  # 将文本中的括号、空格及连字符 删除
    # 中国手机号正则表达式
    pattern =  r'\d{11}'
    # 提取出所有匹配项
    phone_numbers = re.findall(pattern, text)
    return phone_numbers

pattern 中的正则表达式用于匹配中国大陆手机号。让我们详细解释一下这个正则表达式的各个部分:

  1. (?<!\d): 这是一个否定顺序环视(negative lookbehind),它表示匹配手机号前面不能有数字。换句话说,手机号前面的字符不能是 0-9 之间的任何一个数字。

  2. (1[3-9]\d{9}): 这是手机号的主匹配部分。

    • 1:表示手机号以数字 1 开头。
    • [3-9]:表示手机号的第二位数字是 3 到 9 之间的任何一个数字。
    • \d{9}:表示接下来是 9 个数字(\d 表示数字,{9} 表示重复 9 次)。
  3. (?!\d): 这是一个否定顺序前瞻(negative lookahead),表示手机号后面不能有数字。换句话说,手机号后面的字符不能是 0-9 之间的任何一个数字。

这个正则表达式可以有效地匹配中国大陆的手机号,同时避免匹配到中间包含手机号格式的更长数字串。例如,数字序列12313800138000999虽然包含了一个手机号13800138000,但由于它前后都有数字,所以不会被错误匹配。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值