@zhangyu756897669
2017-09-12T15:05:06.000000Z
字数 2317
阅读 611
未分类
您还需要能够匹配电子邮件地址的正则表达式。
#! python3
# phoneAndEmail.py - 查找剪贴板上的电话号码和电子邮件地址。
import pyperclip, re
phoneRegex = re.compile(r'''(
---snip---
# Create email regex.
emailRegex = re.compile(r'''(
[a-zA-Z0-9._%+-]+ # 用户名❶
@ # @ 符号
[a-zA-Z0-9.-]+ # 域名
(\.[a-zA-Z]{2,4})
)''', re.VERBOSE)
#在剪贴板文本中查找匹配。
#将结果复制到剪贴板
电子邮件地址❶的用户名部分是一个或多个可以是以下任何一个的字符:小写和大写字母,数字,点,下划线,百分号,加号或连字符。您可以将所有这些都放入字符类:[a-zA-Z0-9 ._% - ]。
域名和用户名用@符号❷分隔。域名❸只有字母,数字,句点和连字符稍稍放宽一些,[a-zA-Z0-9.-]。最后将是“dot-com”部分(技术上被称为顶级域名),这真的可以是任何东西。这是两到四个字符。
电子邮件地址的格式有很多奇怪的规则。这个正则表达式将不匹配每个可能的有效电子邮件地址,但它几乎匹配您将遇到的任何典型的电子邮件地址。
现在您已经指定了电话号码和电子邮件地址的正则表达式,您可以让Python的re模块尽力在剪贴板上查找所有匹配项。 pyperclip.paste()函数将获取剪贴板上文本的字符串值,而findall()regex方法将返回一个元组列表。
#! 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: 将结果复制到剪贴板。
#! python3
# phoneAndEmail.py - Finds phone numbers and email addresses on the clipboard.
--snip--
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.')
例如,将Web浏览器打开到Nostarch Press联系页面http://www.nostarch.com/contactus.htm,按CTRL-A选择页面上的所有文本,然后按CTRL-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
识别文本模式(并且可能用sub()方法代替它们)具有许多不同的潜在应用。
* 查找以http://或https://开头的网址。
* 以不同的日期格式清理日期(例如3/14/2015,03-14-2015和2015/3/14),以日期格式替换为单一标准格式。
* 删除敏感信息,如社会保障金或信用卡号码。
* 查找常见的拼写错误,例如单词之间的多个空格,意外地意外重复的单词或句子结尾处的多个感叹号。