当前位置:嗨网首页>书籍在线阅读

30-第3步_在剪贴板文本中找到所有匹配

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

第3步:在剪贴板文本中找到所有匹配

既然已经指定了电话号码和E-mail地址的正则表达式,就可以让 Python的 re 模块做辛苦的工作:查找剪贴板文本中所有的匹配。 pyperclip.paste() 函数将取得一个字符串,内容是剪贴板上的文本, findall() 正则表达式方法将返回一个元组的列表。

让你的程序看起来像这样:

  #! python3
  # phoneAndEmail.py - Finds phone numbers and email addresses on the clipboard.
  import pyperclip, re
  phoneRegex = re.compile(r'''(
  --snip--
  # Find matches in clipboard text.
  text = str(pyperclip.paste())
❶ matches = []
❷ 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])
  # TODO: Copy results to the clipboard.

每个匹配对应一个元组,每个元组包含正则表达式中每个分组的字符串。回忆一下,因为分组0匹配整个正则表达式,所以在元组索引0处的分组就是你感兴趣的内容。

在❶处可以看到,你将所有的匹配保存在名为 matches 的列表变量中。它从一个空列表开始,经过几个 for 循环。对于 E-mail 地址,你将每次匹配的分组0添加到列表中❸。对于匹配的电话号码,你不想只是添加分组0。虽然程序可以“检测”几种不同形式的电话号码,但你希望添加的电话号码是唯一的、标准的格式。 phoneNum 变量包含一个字符串,它由匹配文本的分组1、3、5和8构成❷。(这些分组是区号、前3个数字、后4个数字和分机号。)