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() 函數判斷手機號碼是否有效。
原創文章,作者:VAVVO,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/374868.html