Python實踐練習:電話號碼和 E-mail 地址提取程式

來源:互聯網
上載者:User

標籤:htm   後退   account   else   diy   ber   app   rip   int   

題目:

假設你有一個無聊的任務,要在一篇長的網頁或文章中,找出所有電話號碼和郵件地址。如果手動翻頁,可能需要尋找很長時間。如果有一個程式,可以在剪貼簿的文本中尋找電話號碼和 E-mail 地址,那你就只要按一下 Ctrl-A 選擇所有文本,按下 Ctrl-C 將它複製到剪貼簿,然後運行你的程式。它會用找到的電話號碼和 E-mail地址,替換掉剪貼簿中的文本。

測試文本
Skip to main contentHomeSearch formSearchGO!TopicsArduinoArt & DesignGeneral ComputingHacking & Computer SecurityHardware / DIYJavaScriptKidsLEGO?LEGO? MINDSTORMS?Linux & BSDSkip to main contentHomeSearch formSearchGO!CatalogMediaWrite for UsAbout UsTopicsArduinoArt & DesignGeneral ComputingHacking & Computer SecurityHardware / DIYJavaScriptKidsLEGO?LEGO? MINDSTORMS?Linux & BSDMangaMinecraftProgrammingPythonScience & MathScratchSystem AdministrationEarly AccessGift CertificatesFree ebook edition with every print book purchased from nostarch.com!Shopping cart3 Items    Total: $53.48View cart CheckoutContact UsNo Starch Press, Inc.245 8th StreetSan Francisco, CA 94103 USAPhone: 800.420.7240 or +1 415.863.9900 (9 a.m. to 5 p.m., M-F, PST)Fax: +1 415.863.9950Reach Us by EmailGeneral inquiries: [email protected]Media requests: [email protected]Academic requests: [email protected] (Please see this page for academic review requests)Help with your order: [email protected]Reach Us on Social MediaTwitterFacebookNavigationMy accountLog outManage your subscription preferences.About Us  |  ★ Jobs! ★  |  Sales and Distribution  |  Rights  |  Media  |  Academic Requests  |  Conferences  |  Order FAQ  |  Contact Us  |  Write for Us  |  PrivacyCopyright 2018 No Starch Press, Inc
運行後結果
Copied to clipboard:800-420-7240415-863-9900415-863-9950 [email protected][email protected][email protected][email protected]Hit any key to close this window...
思路

當你開始接手一個新項目時,很容易想要直接開始寫代碼。但更多的時候,最好是後退一步,考慮更大的圖景。我建議先草擬高層次的計劃,弄清楚程式需要做什麼。暫時不要思考真正的代碼,稍後再來考慮。
1.建立電話的Regex和建立email的Regex
2.匹配剪下板的文本
3.把處理好的文本複製到剪下板

現在開始寫程式
#! python3# phoneAndEmail.py - Finds phone numbers and email addresses on the clipboard.import re, pyperclip# 建立電話的RegexphoneRegex = re.compile(r'''(   (\d{3}|\(d{3}\))?  # 區號可選,444或(444)   (\s|-|\.)?  # 分隔字元:字元或-或. 可選   (\d{3})  # 三個數字   (\s|-|\.)?  # 分隔字元:字元或-或. 可選   (\d{4})  # 四個數字   )''',re.VERBOSE)# 建立email的RegexemailRegex = re.compile(r'''(   [a-zA-Z0-9._%+-]+  # username   @   [a-zA-Z0-9.-]+  # domail name   (\.[a-zA-Z]{2,4})  # dot-something   )''',re.VERBOSE)# 匹配剪下板的文本text = str(pyperclip.paste())matches = []for groups in phoneRegex.findall(text):   phoneNum = '-'.join([groups[1], groups[3], groups[6]])   matches.append(phoneNum)for groups in emailRegex.findall(text):   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.')
分析代碼

re.VERBOSE是讓Regex中可以忽略注釋和空白符的一個參數。verbose表示冗雜的意思,就是可以讓你添些注釋,對正則更可讀。
Regex詳見:Python正則

另一個坑就是groups了,原來我沒有理解groups與group的區別
group()是截取分組的意思,例子:

import rea = "123abc456"print re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(0)   #123abc456,返回整體print re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(1)   #123print re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(2)   #abcprint re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(3)   #456

groups() 返回一個包含所有小組字串的元組,從 1 到 所含的小組號。
代碼中phoneNum = ‘-‘.join([groups[1], groups[3], groups[6]])中的groups是一個變數,別看錯了。

Python實踐練習:電話號碼和 E-mail 地址提取程式

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.