首页 > 编程知识 正文

Python 提取字符串中的电话号码

时间:2023-11-19 01:47:33 阅读:291972 作者:QUKZ

Python 是一种高级的、面向对象的编程语言,它具有简单易学、开发迅速、代码简洁等特点,广泛应用于 Web 开发、数据科学、人工智能等领域。在 Python 中,提取字符串中的电话号码是一项常用而重要的操作。本文将从多个方面探讨如何使用 Python 提取字符串中的电话号码。

一、正则表达式提取电话号码

正则表达式是一种通用的字符串匹配与处理模式,用于检索、替换那些符合某个规则的文本。在 Python 中,可以借助 re 模块使用正则表达式提取字符串中的电话号码。


import re

phone_regex = re.compile(r'(d{3})D*(d{3})D*(d{4})')
text = '联系我电话为:123-456-7890。'
match = phone_regex.search(text)
if match:
    phone_number = '-'.join(match.groups())
    print(phone_number)

上述代码中,首先使用 re.compile() 函数创建了一个正则表达式对象 phone_regex,该正则表达式用于匹配形如 123-456-7890 或 (123) 456-7890 的电话号码。接着使用 search() 函数在文本 text 中查找匹配的电话号码,如果存在匹配,则使用 join() 函数合并电话号码的各个部分,并输出处理后的电话号码。

二、pyquery 提取网页中的电话号码

pyquery 是一个强大、灵活的 Python 网页解析库,支持类似于 jQuery 的语法和 API,可以快速、方便地从 HTML 文档中提取数据。在使用 pyquery 提取网页中的电话号码时,可以先使用 requests 模块获取网页 HTML,然后使用 pyquery 解析 HTML 文档,最后使用正则表达式提取电话号码。


import requests
from pyquery import PyQuery as pq
import re

url = 'https://www.example.com/'
html = requests.get(url).text
doc = pq(html)
phone_regex = re.compile(r'(d{3})D*(d{3})D*(d{4})')
phone_numbers = []
for para in doc('p').items():
    text = para.text().strip()
    if phone_regex.search(text):
        match = phone_regex.search(text)
        phone_number = '-'.join(match.groups())
        phone_numbers.append(phone_number)
print(phone_numbers)

上述代码中,首先使用 requests.get() 函数获取指定网页的 HTML,并使用 PyQuery 解析 HTML 文档。然后使用正则表达式匹配电话号码,并将匹配结果存储在列表 phone_numbers 中。在具体提取电话号码时,遍历网页中的所有段落,使用 strip() 函数去掉段落首尾的空白字符,并使用正则表达式查找匹配的电话号码,如果存在,则使用 join() 函数合并电话号码的各个部分。

三、使用第三方库 phonenumbers 进行电话号码解析

phonenumbers 是一个 Python 第三方库,用于解析、验证、格式化电话号码。它支持国内外多种电话号码格式,包括国际区号、本地区号、分机号、带括号或不带括号的电话号码等。在使用 phonenumbers 进行电话号码解析时,需要先使用 parse() 函数将电话号码解析为 phonenumbers 中的 PhoneNumber 对象,然后可以通过该对象的各个属性获取电话号码的详细信息。


import phonenumbers

phone_number = '+86 10-12345678'
parsed_number = phonenumbers.parse(phone_number, None)
print(parsed_number.country_code)
print(parsed_number.national_number)
print(phonenumbers.format_number(parsed_number, phonenumbers.PhoneNumberFormat.NATIONAL))

上述代码中,首先定义了一个包含国际区号、本地区号和固定电话号码的电话号码变量 phone_number,然后使用 parse() 函数将电话号码解析为 PhoneNumber 对象 parsed_number,使用该对象的 country_code 和 national_number 属性分别获取电话号码的国家区号和国内区号。最后使用 format_number() 函数将 PhoneNumber 对象格式化成国内格式的电话号码。

四、使用第三方库 phonenumbers 进行电话号码验证

phonenumbers 也可以用于验证手机号码是否有效。在验证手机号码时,需要使用 is_valid_number() 函数检测电话号码是否为有效的手机号码。


import phonenumbers

phone_number = '+86 13112345678'
parsed_number = phonenumbers.parse(phone_number, None)
if phonenumbers.is_valid_number(parsed_number):
    print('该手机号码有效。')
else:
    print('该手机号码无效。')

上述代码中,首先定义了一个包含国际区号、本地区号和手机号码的电话号码变量 phone_number,然后使用 parse() 函数将电话号码解析为 PhoneNumber 对象 parsed_number,使用 is_valid_number() 函数判断手机号码是否有效。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。