我有一个包含用户名和电子邮件地址列表的文件,我需要两个表达式。一个用于获取电子邮件地址(它们始终以.com或.net或.org结尾),另一个用于获取用户名。
我只希望用户名作为一个表达式和域部分作为另一个,我不想要@
符号。
@stackoverflow.com
@google.com
@example.com
我试过
^@.*?..*?$
用户
@Perl
@Python
@PHP
我试过
^@.*?$
任何建议都很好。
答案 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的引擎最有可能具有相同的语法