正则表达式从电子邮件地址中提取顶级域名

时间:2014-04-01 12:00:24

标签: python regex tld

来自

等电子邮件地址
xxx@site.co.uk
xxx@site.uk
xxx@site.me.uk

我想写一个应该返回的正则表达式' uk'是所有的情况。

我试过了

'+@([^.]+)\..+' 

仅提供域名。我尝试过使用

'[^/.]+$'  

但它给出了错误。

4 个答案:

答案 0 :(得分:3)

提取你要求的正则表达式是:

\.([^.\n\s]*)$  with /gm modifiers

说明:

    \. matches the character . literally
1st Capturing group ([^.\n\s]*)
    [^.\n\s]* match a single character not present in the list below
        Quantifier: Between zero and unlimited times, as many times as possible, giving back as needed [greedy]
        . the literal character .
        \n matches a fine-feed (newline) character (ASCII 10)
        \s match any white space character [\r\n\t\f ]
$ assert position at end of a line
m modifier: multi-line. Causes ^ and $ to match the begin/end of each line (not only begin/end of string)
g modifier: global. All matches 

对于您的输入示例,它将是:

import re
m = re.compile(r'\.([^.\n\s]*)$', re.M)                                             
f = re.findall(m, data)                                                             
print f 

输出:

['uk', 'uk', 'uk']

希望这会有所帮助。

答案 1 :(得分:2)

由于myemail@com是有效地址,您可以使用:

@.*([^.]+)$

答案 2 :(得分:1)

你不需要正则表达式。这总会给你“英国”。在你的例子中:

>>> url = 'foo@site.co.uk'
>>> url.split('.')[-1]
'uk'

答案 3 :(得分:0)

简单.*\.(\w+)无济于事?

如果需要,可以为正则表达式添加更多“@”验证。