Python正则表达式,在地址中查找电子邮件域

时间:2011-04-12 02:57:38

标签: python regex email search dns

我知道我是个白痴,但我无法从这个电子邮件地址中删除该域名:

'blahblah@gmail.com'

我想要的输出:

'@gmail.com'

我目前的输出:

.

(这只是一个句号角色)

这是我的代码:

import re
test_string = 'blahblah@gmail.com'
domain = re.search('@*?\.', test_string)
print domain.group()

这就是我认为我的正则表达式('@ *?',test_string):

 ' # begin to define the pattern I'm looking for (also tell python this is a string)

  @ # find all patterns beginning with the at symbol ("@")

  * # find all characters after ampersand

  ? # find the last character before the period

  \ # breakout (don't use the next character as a wild card, us it is a string character)

  . # find the "." character

  ' # end definition of the pattern I'm looking for (also tell python this is a string)

  , test string # run the preceding search on the variable "test_string," i.e., 'blahblah@gmail.com'

我基于这里的定义:

http://docs.activestate.com/komodo/4.4/regex-intro.html

另外,我搜索了但其他答案对我来说有点太难以理解。

像往常一样,非常感谢帮助。感谢。

如果重要我的东西:

  

Windows 7 Pro(64位)

     

Python 2.6(64位)


PS。 StackOverflow问题:我的帖子不包括新行,除非我在它们之间点击两次“返回”。例如(当我发帖时,这些都在不同的行上):

@ - 找到所有以at符号开头的模式(“@”) * - 在&符号后找到所有字符 ? - 找到期间之前的最后一个字符 \ - breakout(不要将下一个字符用作外卡,我们这是一个字符串字符) 。 - 找出 ”。”字符 ,test string - 在变量“test_string”上运行前面的搜索,即'blahblah@gmail.com'

这就是为什么我在每行上面都有一个空白行。我究竟做错了什么? THX。

7 个答案:

答案 0 :(得分:20)

这是我认为可能有用的东西

import re
s = 'My name is Conrad, and blahblah@gmail.com is my email.'
domain = re.search("@[\w.]+", s)
print domain.group()

输出

@gmail.com

正则表达式的工作原理:

@ - 扫描直至看到此角色

[\w.]可能匹配的一组字符,因此\w是所有字母数字字符,并且尾随句点.会添加到该字符集中。

+前一组中的一个或多个。

因为此正则表达式匹配句点字符和@之后的每个字母数字,所以即使在句子中间,它也会匹配电子邮件域。

答案 1 :(得分:13)

好的,为什么不使用拆分? (或分区)

"@"+'blahblah@gmail.com'.split("@")[-1]

或者您可以使用其他字符串方法,例如find

>>> s="bal@gmail.com"
>>> s[ s.find("@") : ]
'@gmail.com'
>>>

如果您要从其他文本中提取电子邮件地址

f=open("file")
for line in f:
    words= line.split()
    if "@" in words:
       print "@"+words.split("@")[-1]
f.close()

答案 2 :(得分:6)

使用正则表达式:

>>> re.search('@.*', test_string).group()
'@gmail.com'

另一种方式:

>>> '@' + test_string.split('@')[1]
'@gmail.com'

答案 3 :(得分:2)

只是想指出chrisaycock的方法会匹配表单

的无效电子邮件地址
herp@

正确确保您只是将可能有效的电子邮件与您需要稍微更改的域匹配

使用正则表达式:

>>> re.search('@.+', test_string).group()
'@gmail.com'

答案 4 :(得分:2)

使用以下正则表达式,您可以提取任何域,例如.com或.in。

import re
s = 'my first email is user1@gmail.com second email is enter code hereuser2@yahoo.in and third email is user3@outlook.com'
print(re.findall('@+\S+[.in|.com|]',s))

输出

['@gmail.com', '@yahoo.in']

答案 5 :(得分:2)

您可以尝试使用urllib

from urllib import parse
email = 'myemail@mydomain.com'
domain = parse.splituser(email)[1]

输出将为

'mydomain.com'

答案 6 :(得分:0)

这是使用索引函数的另一种方法:

email_addr = 'blahblah@gmail.com'

# Find the location of @ sign
index = email_addr.index("@")

# extract the domain portion starting from the index
email_domain = email_addr[index:]

print(email_domain)
#------------------
# Output:
@gmail.com