2013-10-12 39 views
0

我有一个包含用户名和电子邮件地址列表的文件,我需要两个表达式。一个获取电子邮件地址(它们总是以.com或.net或.org结尾),另一个获取用户名。在@符号后提取用户名或电子邮件/域名

我只希望用户名作为一个表达式和域名部分作为另一个,我不想@标志。

@stackoverflow.com 
@google.com 
@example.com 

我试图

^@.*?..*?$ 

用户

@Perl 
@Python 
@PHP 

我试图

^@.*?$ 

任何建议都不错。

回答

0

在您的第一个表达式中,如果您在最后一个.*?之前转义了\.点,它将会匹配您的第二个表达式完全匹配整行。匹配但不包括@你可以做..

对于域使用:

^@(\S+\.[^\s]+)$ 

正则表达式:

^    the beginning of the string 
@    '@' 
(   group and capture to \1: 
\S+   non-whitespace (all but \n, \r, \t, \f, and " ") (1 or more times)  
\.   '.' 
[^\s]+  any character except: whitespace (1 or more times) 
)    end of \1 
$    before an optional \n, and the end of the string 

参见live demo

对于用户使用:

^@([^\s.]+)$ 

正则表达式:

^    the beginning of the string 
@    '@' 
(   group and capture to \1: 
[^\s.]+  any character except: whitespace or '.' (1 or more times) 
)    end of \1 
$    before an optional \n, and the end of the string 

live demo

0

你可以为域做这样的事情:

^@[^.]+\.[^.]+$ 

这将匹配字符串的开始,接着是@,后面跟着一个或多个任意字符以外.,其次是一个.,然后是除.之外的任意字符中的一个或多个,后面跟着字符串的结尾。

但是,这不会捕获超过两部分的域(例如@meta.stackoverflow.com)。如果这是重要的,你可能会改为试试这个:

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

这将匹配字符串的开始,接着是@,后面跟着一个或超过.以外的任何字符,随后是由一组的.,随后是除.以外的任何字符中的一个或多个,其中该组可以重复重复一次或多次,接着是字符串的结尾。

而这对于用户:

^@[^.]+$ 

这将匹配字符串的开始,接着是@,后面跟着一个或多个.其他任何字符,随后的年底串。

+0

这是匹配@的下一行吗? – Joec

0

试试这个

USERS (? ?< = @)\ w +

EMAIL (< = @)\ w +(?:COM |网络| ORG)

编辑: 嗯,你并没有规定什么正则表达式引擎你”重新运行,这是基于pcre的,但任何带lookbehind的引擎最有可能将具有相同的语法

相关问题