2015-03-31 86 views
0

我想执行操作就像来自两个 选择任何一个合适的组如:正则表达式匹配一个由两组

gmail.com|gmail.co.in 

这给了我直接结果,但我怎么能写正则表达式蟒蛇为以上情况映射电子邮件ID。 注意。我只是想点或最大两组点和2个字符后,地图3字符

我试着写正则表达式为:

[\w]+\.?[\w]{3}|[[\w]{2}\.?]{2} 

但不会给我预期的结果

如果试图用( )返回组,例如:[email protected]将返回gmail.com,但需要检索整个电子邮件地址。

+0

''[[\ w] {2} \。?]'你在这里做什么?这里'[[\ w]'是一个包含'['和'\ w'的字符类,最后一个']'匹配字符']'。 – Maroun 2015-03-31 09:23:44

+0

你是什么。我只是想分两组。我的意思是[\ w]和\。将这两个组合为一个重复。但不知道如何去做 – Pooja 2015-03-31 09:25:38

+1

'('和')'用于分组,而不是'['和']'。 – Maroun 2015-03-31 09:26:11

回答

2

您可以使用以下正则表达式:

\[email protected]\w+\.((\w{3})|(\w{2}\.\w{2})) 

Demo

所有你需要在这里的就是把第一部分为\[email protected]\w+\.,那么你只需要分组玩,pipe.so以下模式:

((\w{3})|(\w{2}\.\w{2})) 

将匹配的字符串包含是指具有2个字字符第一个串3字字符或(\w{2}\.\w{2})然后用2个单词字符输入字符串。

+0

对于这个正则表达式,如果输入为[email protected],则输出为[('com','com','')]而不是[[email protected]]。我不希望[com,com]作为输出,因为它会影响我的其余代码 – Pooja 2015-03-31 09:35:24

+0

@天使因为“@”不是一个单词字符,而您的第一个示例不包含“@”,请检查编辑 – Kasramvd 2015-03-31 09:37:04

+0

我有((\ w {3})|(\ w {2} \。\ w {2})) – Pooja 2015-03-31 09:41:02

0

希望这会有所帮助。

>>> import re 
>>> y = re.search('(?P<user>\w+)@(?P<domain>[\w.]+)', '[email protected]') 
>>> print y.group("user"), y.group("domain") 
abc gmail.com 
>>> y = re.search('(?P<user>\w+)@(?P<domain>[\w.]+)', '[email protected]') 
>>> print y.group("user"), y.group("domain") 
abc gmail.co.in 
>>> 
0

我希望这可以帮助你。

email = '[email protected]' 
user = email.split('@')[0] 
domain = email.split('@')[1]