@符号后提取用户名或电子邮件/域名

时间:2013-10-12 04:06:44

标签: regex

我有一个包含用户名和电子邮件地址列表的文件,我需要两个表达式。一个用于获取电子邮件地址(它们始终以.com或.net或.org结尾),另一个用于获取用户名。

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

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

我试过

^@.*?..*?$

用户

@Perl
@Python
@PHP

我试过

^@.*?$

任何建议都很好。

3 个答案:

答案 0 :(得分:0)

您可以为域名执行此类操作:

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

这将匹配字符串的开头,后跟@,后跟 .以外的任何字符中的一个或多个,后跟{{1然后是 .以外的任何字符中的一个或多个,后跟字符串的结尾。

但这不会捕获超过两部分的域名(例如.)。如果这很重要,你可以试试这个:

@meta.stackoverflow.com

这将匹配字符串的开头,后跟^@[^.]+(\.[^.]+)+$ ,后跟 @以外的任何字符中的一个或多个,后跟一个组成的组一个.,后跟一个或多个 .之外的任何字符,其中该组可能重复重复一次或多次,然后是字符串的结尾。

这对用户来说:

.

这将匹配字符串的开头,后跟^@[^.]+$ ,后跟 @以外的任何字符中的一个或多个,后跟结束字符串。

答案 1 :(得分: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

答案 2 :(得分:0)

试试这个

用户     (小于?= @)\ W +

电子邮件     (小于?= @)。\ W +(?: COM |净| ORG)

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