这是我的String:
[email protected]
[email protected]
[email protected]
:[email protected]
我现在想要的是得到所有不以冒号开头的电子邮件,并删除前导字符。这就是我想要的输出:
[email protected]
[email protected]
[email protected]
这是我认为应该工作
[^:][a-z0-9_\-\+\.]+@[a-z0-9\-]+\.([a-z]{2,4})(?:\.[a-z]{2})?
但不是我仍然得到的电子邮件与冒号,它只是削减了冒号符号本身。
3条答案
按热度按时间avkwfej41#
您可以使用以下模式。
\b(?<!:)
,一个 * 字边界 * 前面没有:
[^@\s]+@
,最多@
的所有字符[^.]+\.
,最多.
的所有字符[^\s]+\b
,所有字符直到一个 * 字边界 *j13ufse22#
步骤1.
查找常见的电子邮件正则表达式模式,例如^[\w-.]+@([\w-]+.)+[\w-]{2,4}$
步骤2.
通过添加您的规则调整上述模式-添加
[^:a-z]?
以可选地匹配除:
和字母以外的字符,以不消耗电子邮件地址的第一个字母。步骤3.
将电子邮件模式 Package 在
()
中,将匹配的电子邮件放入捕获组中:替换模式将是
$1
,这将是第一个捕获组包含电子邮件在开始时没有特殊字符。Regex demo
ztmd8pv53#
[^:][a-z0-9_\-\+\.]+
部分匹配并 * 消耗 * 除:
以外的任何字符作为第一个匹配的字符,然后匹配一个或多个字,-
,+
或.
字符。这意味着它仍然会返回:
之后的那些匹配,但没有第一个字符。由于您希望在较长的文本中查找类似电子邮件的子字符串,这些子字符串前面不直接带有
:
字符,因此可以依赖于以下模式:参见regex demo。
\b
-字边界(?<!:)
-紧接之前,不应该有:
[a-z0-9_]
-一个单词字符(如果没有使用大小写修饰符,则不包括大写字母)[a-z0-9_\-+.]*
-零个或多个小写字母、数字、_
、-
、+
或.
字符@
- a@
字符[a-z0-9\-]+
-一个或多个小写字母,数字,-
\.
- a.
字符[a-z]{2,4}
-两个、三个或四个小写字母(?:\.[a-z]{2})?
-.
和两个小写字母的可选序列。\b
-字边界