ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

查找网站中的电话号码和 E-mail 地址

2021-03-20 10:58:48  阅读:5671  来源: 互联网

标签:匹配 电话号码 matches nostarch re 查找 groups mail com


1.问题

假设你有一个无聊的任务,要在一篇长的网页或文章中,找出所有电话号码和邮件地址。如果手动翻页,可能需要查找很长时间。如果有一个程序,可以在剪贴板的文本中查找电话号码和 E-mail 地址,那你就只要按一下 Ctrl-A 选择所有文本,
按下 Ctrl-C 将它复制到剪贴板,然后运行你的程序。它会用找到的电话号码和 E-mail地址,替换掉剪贴板中的文本。

2.解决步骤

  1. 从剪贴板取得文本。
  2. 找出文本中所有的电话号码和 E-mail 地址。
  3. 将它们粘贴到剪贴板。
  4. 现在你可以开始思考,如何用代码来完成工作。代码需要做下面的事情:
  5. 使用 pyperclip 模块复制和粘贴字符串。
  6. 创建两个正则表达式,一个匹配电话号码,另一个匹配 E-mail 地址。
  7. 对两个正则表达式,找到所有的匹配,而不只是第一次匹配。
  8. 将匹配的字符串整理好格式,放在一个字符串中,用于粘贴。
  9. 如果文本中没有找到匹配,显示某种消息

3.代码

	#! python3
	# phoneAndEmail.py - Finds phone numbers and email addresses on the clipboard
	import pyperclip, re
	# \s	匹配任意空白字符,等价于 [ \t\n\r\f]
	# \d	匹配任意数字,等价于 [0-9]
	# *     对它前面的正则式匹配0到任意次重复,尽量多的匹配字符串。ab* 会匹配 'a','ab',
	#       或者'a'后面跟随任意个'b'。
	# ?     对它前面的正则式匹配0到1次重复。 ab?会匹配'a'或者'ab'。
	phoneRegex = re.compile(r'''(
	        (\d{3}|\(\d{3}\))?                     # area code
	        (\s|-|\.)?                             # separator
	        (\d{3})                                # first 3 digits
	        (\s|-|\.)                              # separator
	        (\d{4})                                # last 4 digits
	        (\s*(ext|x|ext.)\s*(\d{2,5}))?         # extension
	        )''', re.VERBOSE)
	# [0-9]	        匹配任何数字。类似于 [0123456789]
	# [a-z]	        匹配任何小写字母
	# [A-Z]	        匹配任何大写字母
	# [a-zA-Z0-9]	匹配任何字母及数字
	# .	            匹配任意字符,除了换行符,当re.DOTALL标记被指定时,则可以匹配包括换行符的任意字符
	# +             对它前面的正则式匹配1到任意次重复。 ab+ 会匹配 'a' 后面跟随1个以上到任意个'b',
	#               它不会匹配'a'。
	
	emailRegex = re.compile(r'''(
	        [a-zA-Z0-9._%+-]+      # username,可能包含小写和大写字母、数字、句点、下划线、百分号、加号或短横
	        @                      # @ symbol
	        [a-zA-Z0-9.-]+         # domain name
	        (\.[a-zA-Z]{2,4})      # dot-something
	        )''', re.VERBOSE)
	
	# Find matches in clipboard text
	text = str(pyperclip.paste())
	matches = []
	for groups in phoneRegex.findall(text):
	    # 将groups[1], groups[3], groups[5]连接为一个字符串,每个groups使用'-'隔开
	    phoneNum = '-'.join([groups[1], groups[3], groups[5]])
	    if groups[8] != '':
	        phoneNum += ' x' + groups[8]
	    matches.append(phoneNum)
	
	for groups in emailRegex.findall(text):
	    matches.append(groups[0])
	
	# Copy results to the clipboard.
	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.')

4.测试结果

输入:

155156-55658156
800-420-7240
415-863-9900
415-863-9950
soidofs@dsdgdfsfv
info@nostarch.com
media@nostarch.com
academic@nostarch.c

输出:

Copied to clipboard:
800-420-7240
415-863-9900
415-863-9950
info@nostarch.com
media@nostarch.com
academic@nostarch.com
help@nostarch.com

5.参考资料:

  1. Python编程快速上手——让繁琐工作自动化

标签:匹配,电话号码,matches,nostarch,re,查找,groups,mail,com
来源: https://blog.csdn.net/u011037593/article/details/115023833

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有