python正则表达式提取电话号码_Python学习笔模式匹配与正则表达式之电话号码和Email地址提取程序...
隨筆記錄方便自己和同路人查閱。
#------------------------------------------------我是可恥的分割線-------------------------------------------
假設你有一個無聊的任務,要在一篇長的網頁或文章中,找出所有電話號碼和郵件地址。如果手動翻頁,可能需要查找很長時間。
如果有一個程序,可以在剪貼板的文本中查找電話號碼和 E-mail 地址,那你就只要按一下 Ctrl-A 選擇所有文本,按下 Ctrl-C 將它復
制到剪貼板,然后運行你的程序。它會用找到的電話號碼和 E-mail地址,替換掉剪貼板中的文本。當你開始接手一個新項目時,很容
易想要直接開始寫代碼。但更多的時候,最好是后退一步,考慮更大的圖景。我建議先草擬高層次的計劃,弄清楚程序需要做什么。
暫時不要思考真正的代碼,稍后再來考慮。現在,先關注大框架。例如,你的電話號碼和 E-mail 地址提取程序需要完成以下任務:
(1)從剪貼板取得文本。
(2) 找出文本中所有的電話號碼和 E-mail 地址。
(3)將它們粘貼到剪貼板。
(4)現在你可以開始思考,如何用代碼來完成工作。代碼需要做下面的事情:
(5) 使用 pyperclip 模塊復制和粘貼字符串。
(6)創建兩個正則表達式,一個匹配電話號碼,另一個匹配 E-mail 地址。
(7)對兩個正則表達式,找到所有的匹配,而不只是第一次匹配。
(8) 將匹配的字符串整理好格式,放在一個字符串中,用于粘貼。
(9)如果文本中沒有找到匹配,顯示某種消息。
這個列表就像項目的路線圖。在編寫代碼時,可以獨立地關注其中的每一步。每一步都很好管理。它的表達方式讓你知道在 Python
中如何去做。
#------------------------------------------------我是可恥的分割線-------------------------------------------
示例代碼:
#! python 3
# -*- coding:utf-8 -*-
# Autor: Li Rong Yang
import re,pyperclip
#定義正則表達式,找出文本中所有的電話號碼。
phoneRegex = re.compile(r'''(
#匹配區號,因為區號可能只是三位數字,也可能是括號中三位數字,所以使用?問號和管道匹配分組中的內容一次或零次
(\d{3}|\(\d{3}\))?
#匹配電話號碼的連接符,因為區號與號碼之間可能是字母也可能是短橫線或者.點符號,所以把他們分在一個組用管道和問號匹配
(\s|-|\.)?
#匹配短橫線后面的三位數字
(\d{3})
#匹配電話號碼的連接符,因為區號與號碼之間可能是字母也可能是短橫線或者.點符號,所以把他們分在一個組用管道和問號匹配
(\s|-|\.)
#匹配四個數字
(\d{4})
#匹配分機號
(\s*(ext|x|ext.)\s*(\d{2,5}))?
)''', re.VERBOSE)
#定義正則表達式,找出文本中所有的E-mail 地址。
emailRegex = re.compile(r'''(
#創建自定義字符分類,匹配小寫a到z、大寫A到Z和數字0到9,后面可以有._%+-
[a-zA-Z0-9._%+-]+
#自定義字符分類后面是安特符號
@
#自定義字符分類,匹配寫a到z、大寫A到Z和數字0到9,后面可以有.-
[a-zA-Z0-9.-]+
#匹配分組,.點后面可以是任意大小寫字母,可以有2到4個
(\.[a-zA-Z]{2,4})
)''',re.VERBOSE)
#從剪貼板取得文本。
text = str(pyperclip.paste())
#創建一個空列表,將所有的匹配保存在名為 matches 的列表變量中
matches = []
#循環匹配到的電話號碼
for groups in phoneRegex.findall(text):
#把匹配到的電話號碼,區號、前三位數字、后四位數字轉換為字符串,以斷橫杠分割
phoneNum = '-'.join([groups[1],groups[3],groups[5]])
#判斷分機號是否不等于空
if groups[8] != '':
#電話號碼中帶有分機號時,在分機號前面加空格和大寫X
phoneNum += ' X'+groups[8]
#把分機號追加到matches列表中
matches.append(phoneNum)
#循環匹配到的email地址
for groups in emailRegex.findall(text):
#分組0 匹配整個正則表達式,把email地址追加到matches列表中
matches.append(groups[0])
if len(matches) > 0:
# 將匹配的字符串整理好格式,放在一個字符串中,用于粘貼。
pyperclip.copy('\n'.join(matches))
print('Copied to clipboard:')
# 打印放入粘貼版的內容。
print('\n'.join(matches))
else:
# 如果文本中沒有找到匹配,顯示某種消息。
print('No phone numbers or email addresses found.')
運行結果:
總結
以上是生活随笔為你收集整理的python正则表达式提取电话号码_Python学习笔模式匹配与正则表达式之电话号码和Email地址提取程序...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python数据降维_使用python实
- 下一篇: 快讯|一览科技牵头成立《水浒将星录》IP