如何从原始字符串中获取所有电子邮件

时间:2018-02-18 17:13:59

标签: python regex email web screen-scraping

我试过这段代码:

$ docker volume create foo

$ docker volume inspect foo
[
    {
        "CreatedAt": "2018-02-18T12:10:51-05:00",
        "Driver": "local",
        "Labels": {},
        "Mountpoint": "/home/var-docker/volumes/foo/_data",
        "Name": "foo",
        "Options": {},
        "Scope": "local"
    }
]

结果:

contents = 'alokm.014@gmail.yahoo.com.....thankyou'
    match = re.findall(r'[\w\.-]+@[\w\.-]+', contents)
    print match

我想从我的电子邮件中删除alokm.014@gmail.yahoo.com.....thankyou

是否有可能只获得....thankyou 还有一件事,内容列表更大,所以我想要一些改变 alok.014@gmail.yahoo.com 如果可能的话。

2 个答案:

答案 0 :(得分:2)

我不了解python,但像Java这样的语言库有帮助验证URL和电子邮件地址的库。 或者,您可以使用经过严格审查的正则表达式。

我的建议是继续根据点删除字符串的结尾,直到字符串验证为止。因此,测试字符串,如果它没有验证为电子邮件,请从右侧读取字符串,直到遇到句号,然后将句点和所有内容放在右边,然后重新开始。

所以你要像这样循环

alokm.014@gmail.yahoo.com.....thankyou
alokm.014@gmail.yahoo.com....
alokm.014@gmail.yahoo.com...
alokm.014@gmail.yahoo.com..
alokm.014@gmail.yahoo.com.
alokm.014@gmail.yahoo.com

此时它将验证为真实的电子邮件地址。是的,它很慢。是的,它可以被欺骗。但它基于给出的小信息(可能的字符串)大部分时间都可以工作。

答案 1 :(得分:1)

有趣的问题!而且,这是一个Python Regex程序,可帮助从contents提取电子邮件:

import re

contents = 'alokm.014@gmail.yahoo.com.....thankyou'

emailRegex = re.compile(r'''
[a-zA-Z0-9.]+         # username
@                     # @ symbol
[a-zA-Z0-9.]+\.com    # domain             
''', re.VERBOSE)      # re.VERBOSE helps make Regex multi-line with comments for better readability

extractEmail = emailRegex.findall(contents)
print(extractEmail)

输出将是:

['alokm.014@gmail.yahoo.com']

我现在建议您参考此Regex-HowTo doc,以了解该程序中发生的情况,并提出一个更好的版本,可以从较大的文本中提取所有电子邮件。