我有一个包含用户名和电子邮件地址列表的文件,我需要两个表达式。一种用于获取电子邮件地址(它们始终以 .com 或 .net 或 .org 结尾),另一种用于获取用户名。
我只希望用户名作为一个表达式,域部分作为另一个,我不想要@
符号。
@stackoverflow.com
@google.com
@example.com
我试过了
^@.*?..*?$
用户
@Perl
@Python
@PHP
我试过了
^@.*?$
任何建议都是好的。
我有一个包含用户名和电子邮件地址列表的文件,我需要两个表达式。一种用于获取电子邮件地址(它们始终以 .com 或 .net 或 .org 结尾),另一种用于获取用户名。
我只希望用户名作为一个表达式,域部分作为另一个,我不想要@
符号。
@stackoverflow.com
@google.com
@example.com
我试过了
^@.*?..*?$
用户
@Perl
@Python
@PHP
我试过了
^@.*?$
任何建议都是好的。
尝试这个
用户 (?<=@)\w+
电子邮件 (?<=@)\w+.(?:com|net|org)
编辑:嗯,您没有规定您正在运行什么正则表达式引擎,这是基于 pcre 的,但是任何具有后视功能的引擎最有可能具有相同的语法
你可以对域做这样的事情:
^@[^.]+\.[^.]+$
这将匹配字符串的开头,后跟一个@
,后跟一个或多个除 之外 .
的任何字符,后跟一个.
,后跟一个或多个除 之外 .
的任何字符,然后是字符串的结尾。
但这不会捕获具有两个以上部分的域(例如@meta.stackoverflow.com
)。如果这很重要,你可以试试这个:
^@[^.]+(\.[^.]+)+$
这将匹配字符串的开头,后跟一个@
,后跟一个或多个除 之外 .
的任何字符,后跟一个由 a 组成的组.
,后跟一个或多个除 之外 .
的任何字符,其中该组可以重复重复一次或多次,然后是字符串的结尾。
这对用户来说:
^@[^.]+$
这将匹配字符串的开头,后跟一个,然后是一个或多个除 之外@
的任何字符,然后是字符串的结尾。 .
\.
在您的第一个表达式中,如果您在最后一个表达式之前转义点,它将匹配.*?
您的第二个表达式只是清楚地匹配整行。匹配但排除@
你可以做的..
对于域使用:
^@(\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
观看现场演示
供用户使用:
^@([^\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
观看现场演示