Python瓦匠 —— 小项目(找出文本中所的电话号码和邮件地址)

程序设计:

我们要完成的目的:在复制整个文本之后运行程序,就可以粘贴文本中所有电话号码和邮件。

过程:

  • 使用pyperclip模块复制和粘贴字符串。
  • 创建两个正则表达式,一个匹配电话号码,另一个匹配E-mail。
  • 对两个正则表达式找到所有的匹配(findall()方法)。
  • 整理匹配到的字符串格式,放在一个字符串中,用于粘贴。
  • 如果没有找到相关信息,返回提示。 

 第一步:创建一个查找电话号码的正则表达式

#!python3
#phoneAndEmail.py - 获取文本中的电话号码和email地址。

import pyperclip
import re

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-zA-Z0-9._%+-]+     #用户名
     @
     [a-zA-Z0-9.-]+        #域名
     (\.[a-zA-Z]{2,4})     #匹配两到四个字符
     )''',re.VERBOSE)

 

第三步:在剪切板文本中找到所有匹配

使用pyperclip.paste()函数获取一个字符串,内容是剪切板上的文本。

findall()正则表达式方法将返回一个元组的列表。

#找到文本中电话号码和email地址
text = str(pyperclip.paste()) #从剪切板上面获得要匹配的文本
matches = []                     #用来保存电话号码和email的列表

#获得phoneNum
for groups in phoneRegex.findall(text):
     phoneNum = '-'.join([groups[1],groups[3],groups[5]])
     if groups[8] != ' ' :
          phoneNum += ' x' + groups[8]
     matches.append(phoneNum)

#获得email
for groups in emailRegex.findall(text):
     matches.append(groups[0])

 

第四步:将matches列表中的内容链接成一个字符串,并复制到剪切板中。

因为pyperclip.copy()函数接收的是字符串值,而不是字符串的列表,所以要用join()方法将matches列表链接成字符串。

#将得到的文本复制到剪切板上面
if len(matches) > 0:
     pyperclip.copy('\n'.join(matches))#链接matches中的字符串链接起来,用\n分割。
     print('Phone and email:')
     print('\n\n'.join(matches))

#没找到号码和email的情况
else:
     print('文本中没有电话号码和email地址!')

 

 代码整合:

#!python3
#phoneAndEmail.py - 获取文本中的电话号码和email地址。

import pyperclip
import re

phoneRegex = re.compile(r'''(
     (\d{3}|\(\d{3}\))?  #匹配地区代码(可选)
     (\s|-|\.)?          #电话号码分割字符可以是空格、-、句点
     (\d{3})             #电话号码的前三位
     (\s|-|\.)?          #分割
     (\d{4})             #后四位
     (\s*(ext|x|ext.)\s*(\d{2,5}))?     #可选的分机号
     )''',re.VERBOSE)

emailRegex = re.compile(r'''(
     [a-zA-Z0-9._%+-]+     #用户名
     @
     [a-zA-Z0-9.-]+        #域名
     (\.[a-zA-Z]{2,4})     #匹配两到四个字符
     )''',re.VERBOSE)

#找到文本中电话号码和email地址
text = str(pyperclip.paste()) #获取文本
matches = []                  #用来保存电话号码和email的列表
for groups in phoneRegex.findall(text):
     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])

#将得到的文本复制到剪切板上面
if len(matches) > 0:
     pyperclip.copy('\n'.join(matches))#链接matches中的字符串链接起来,用\n分割。
     print('Phone and email')
     print('\n\n'.join(matches))
else:
     print('文本中没有电话号码和email地址!')

运行程序之前。我们首先复制《python快速上手》书中提供的文本。

文本地址:https://nostarch.com/contactus.htm

按住Ctrl-A全选,再复制全文,然后运行该程序。

运行结果如下:

Phone and email:
800-420-7240 x

415-863-9900 x

415-863-9950 x

info@nostarch.com

media@nostarch.com

academic@nostarch.com

info@nostarch.com
>>> 

 此时剪切板上的内容就是上述结果。我们可以使用该程序帮助我们提取大文本中想要的内容。

 

posted @ 2018-02-04 16:26  未来分析师  阅读(1332)  评论(0编辑  收藏  举报