前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python脚本练习(3):正则表达式实例

python脚本练习(3):正则表达式实例

作者头像
AsicWonder
发布2020-07-14 14:33:51
4900
发布2020-07-14 14:33:51
举报

脚本需求:从一个网页中找到所有的电话号码和邮箱地址

任务划分与实现:

1、 将网页复制到剪贴板

打开网页“https://nostarch.com/contactus”,Ctrl+A、Ctrl+C

2、使用pyperclip库,从剪贴板取得文本

>>> import pyperclip,re

>>> text=str(pyperclip.paste())

代码语言:javascript
复制
>>> text
'Got It\r\nThis website usescookies to improve your experience. Learn More\r\nSkip to maincontent\r\n
Home\r\nSearch form\r\nSearch\r\nCatalog\r\nBlog\r\nMedia\r\nWritefor Us\r\nAbout Us\r\nContact Us\r\n
We are currently shipping with some delays.Please see our FAQ.\r\n\r\nTopics\r\nArt & Design\r\nGeneralComputing\r\nHacking & Computer Security\r\n
Hardware /DIY\r\nKids\r\nLEGO®\r\nLinux &BSD\r\nManga\r\nProgramming\r\nPython\r\n
Science & Math\r\nScratch\r\nSystemAdministration\r\nEarly Access\r\nFree ebook edition with every print bookpurchased from nostarch.com!\r\nShopping cart\r\n
0 Items\tTotal: $0.00\r\nUserlogin\r\nLog in\r\nCreate account\r\nContact Us\r\n\r\n
No Starch Press,Inc.\r\n245 8th Street\r\nSan Francisco, CA 94103 USA\r\nPhone: 800.420.7240 or+1 415.863.9900 (9 a.m. to 5 p.m., M-F, PST)\r\nFax: +1415.863.9950\r\n\r\n
Reach Us by Email\r\n\r\nGeneral inquiries:info@nostarch.com\r\n
Media requests: media@nostarch.com\r\nAcademic requests:academic@nostarch.com (Further information)\r\nHelp with your order:info@nostarch.com\r\nReach Us on SocialMedia\r\nTwitter\r\nFacebook\r\nInstagram\r\nLinkedin\r\nPinterest\r\n\r\n
Navigation\r\nMyaccount\r\nWant sweet deals?\r\nSign up for our newsletter.\r\n\r\n\r\nAboutUs  | Jobs!  |  Sales and Distribution  | Rights  |  Media |  Academic Requests  | Conferences  |  FAQ |  Contact Us  | Write for Us  |  Privacy\r\n
Copyright 2020. No Starch Press,Inc\r\n\r\n'

3、创建正则表达式对象phoneRegex和emailRegex

代码语言:javascript
复制
# Create phone regex.
phoneRegex = re.compile(r'''(
    (\d{3}|\(\d{3}\))? # area code
    (\s|-|\.)?         # separator
    (\d{3})              # first 3 digits
    (\s|-|\.)          # separator
    (\d{4})              # last 4 digits
    )''', re.VERBOSE)

(\d{3}|\(\d{3}\))? 匹配可选的3个数字区号,(\s|-|\.)?匹配分隔符,(\d{3})匹配3个数字。

代码语言:javascript
复制
# Create email regex.
emailRegex = re.compile(r'''(
    [a-zA-Z0-9._%+-]+      # username
    @                      # @ symbol
    [a-zA-Z0-9.-]+         # domain name
    (\.[a-zA-Z]{2,4}){1,2} # dot-something
)''',re.VERBOSE)

[a-zA-Z0-9._%+-]+匹配用户名,[a-zA-Z0-9.-]+匹配域名,(\.[a-zA-Z]{2,4}){1,2}匹配.xx

可以看到上面的这种正则表达式写法非常的易读。

4、找出文本中所有的电话号码并保存。

代码语言:javascript
复制
matches = []
for groups in phoneRegex.findall(text):
    matches.append(groups[0])

其中phoneRegex.findall(text)返回的是元组的列表

代码语言:javascript
复制
>>>phoneRegex.findall(text)
[
('800.420.7240','800', '.', '420', '.', '7240'),
('415.863.9900','415', '.', '863', '.', '9900'),
('415.863.9950','415', '.', '863', '.', '9950')]

最终电话号码保存到数组,如下所示

代码语言:javascript
复制
>>> matches
['800.420.7240', '415.863.9900','415.863.9950']

5、找出文本中所有的E-mail 地址并保存。

代码语言:javascript
复制
for groups in emailRegex.findall(text):
    matches.append(groups[0])

6、打印结果

代码语言:javascript
复制
if len(matches) > 0:
    print('\n'.join(matches))
else:
    print('No phone numbers or email addressesfound.')

如下:

代码语言:javascript
复制
800.420.7240
415.863.9900
415.863.9950
info@nostarch.com
media@nostarch.com
academic@nostarch.com
info@nostarch.com
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-07-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数字芯片实验室 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档