程序设计:
我们要完成的目的:在复制整个文本之后运行程序,就可以粘贴文本中所有电话号码和邮件。
过程:
- 使用pyperclip模块复制和粘贴字符串。
- 创建两个正则表达式,一个匹配电话号码,另一个匹配E-mail。
- 对两个正则表达式找到所有的匹配(findall()方法)。
- 整理匹配到的字符串格式,放在一个字符串中,用于粘贴。
- 如果没有找到相关信息,返回提示。
第一步:创建一个查找电话号码的正则表达式
#!python3#phoneAndEmail.py - 获取文本中的电话号码和email地址。import pyperclipimport rephoneRegex = 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的列表#获得phoneNumfor groups in phoneRegex.findall(text): phoneNum = '-'.join([groups[1],groups[3],groups[5]]) if groups[8] != ' ' : phoneNum += ' x' + groups[8] matches.append(phoneNum)#获得emailfor 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 pyperclipimport rephoneRegex = 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 x415-863-9900 x415-863-9950 xinfo@nostarch.commedia@nostarch.comacademic@nostarch.cominfo@nostarch.com>>>
此时剪切板上的内容就是上述结果。我们可以使用该程序帮助我们提取大文本中想要的内容。