自动完成无聊的工作第7章:正则表达式-仅提取电话号码的电话号码和电子邮件提取器

时间:2019-01-25 03:20:42

标签: python

我正在关注这本书,并且很确定我已经逐字复制了代码。当我复制发布者网站(nostarch.com/ContactUs)上的“联系我们”页面并通过该程序运行它时,它将输出所有电话号码,但没有电子邮件地址。

我确保代码已正确复制。我以为打印功能可能有问题,所以我尝试将结果粘贴到文本文件中,但仍然找不到电子邮件地址。

import pyperclip, re

# email regex
emailRegex = re.compile(r'''(
    [a-zA-Z0-9._%+-]+  # username
    @                  # at 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):
    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.')

我希望得到结果:

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

但只有这个:

Copied to clipboard:
800-420-7240
415-863-9900
415-863-9950

2 个答案:

答案 0 :(得分:5)

I made sure the code was copied correctly-否。您应将{2-4}替换为{2,4},以便根据RegEx语法和第7章文本查找2到4个字符。

您可以考虑使用https://regex101.com/在线尝试正则表达式,并查看正则表达式的完整说明。

答案 1 :(得分:0)

我做了同样的事情-转到该网站并复制了所有文本,而没有查看内容。然后得到与您相同的输出。但是,原因不是因为代码损坏,而是因为我在浏览器中禁用了javascript。显然,如果检测到您未启用javascript(即您是机器人),他们就会隐藏电子邮件。