提取手机号从文档中

import re

def extract_phone_numbers(text):
    # 中国手机号正则表达式
    pattern = r"(?
    # 提取出所有匹配项
    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. (?: 这是一个否定顺序环视(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,但由于它前后都有数字,所以不会被错误匹配。

你可能感兴趣的:(小工具,python)