Regex查找特定的电子邮件

t5fffqht  于 12个月前  发布在  其他
关注(0)|答案(3)|浏览(90)

这是我的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})?

但不是我仍然得到的电子邮件与冒号,它只是削减了冒号符号本身。

avkwfej4

avkwfej41#

  • "....."*

您可以使用以下模式。

\b(?<!:)[^@\s]+@[^.]+\.[^\s]+\b
  • \b(?<!:),一个 * 字边界 * 前面没有:
  • [^@\s]+@,最多@的所有字符
  • [^.]+\.,最多.的所有字符
  • [^\s]+\b,所有字符直到一个 * 字边界 *
j13ufse2

j13ufse22#

步骤1.
查找常见的电子邮件正则表达式模式,例如^[\w-.]+@([\w-]+.)+[\w-]{2,4}$
步骤2.
通过添加您的规则调整上述模式-添加[^:a-z]?以可选地匹配除:和字母以外的字符,以不消耗电子邮件地址的第一个字母。
步骤3.
将电子邮件模式 Package 在()中,将匹配的电子邮件放入捕获组中:

^[^:a-z]?([\w\-\.]+@([\w-]+\.)+[\w-]{2,4}$)

替换模式将是$1,这将是第一个捕获组包含电子邮件在开始时没有特殊字符。
Regex demo

ztmd8pv5

ztmd8pv53#

[^:][a-z0-9_\-\+\.]+部分匹配并 * 消耗 * 除:以外的任何字符作为第一个匹配的字符,然后匹配一个或多个字,-+.字符。这意味着它仍然会返回:之后的那些匹配,但没有第一个字符。
由于您希望在较长的文本中查找类似电子邮件的子字符串,这些子字符串前面不直接带有:字符,因此可以依赖于以下模式:

\b(?<!:)[a-z0-9_][a-z0-9_\-+.]*@[a-z0-9\-]+\.[a-z]{2,4}(?:\.[a-z]{2})?\b

参见regex demo

  • 详情 *:
  • \b-字边界
  • (?<!:)-紧接之前,不应该有:
  • [a-z0-9_]-一个单词字符(如果没有使用大小写修饰符,则不包括大写字母)
  • [a-z0-9_\-+.]*-零个或多个小写字母、数字、_-+.字符
  • @- a @字符
  • [a-z0-9\-]+-一个或多个小写字母,数字,-
  • \.- a .字符
  • [a-z]{2,4}-两个、三个或四个小写字母
  • (?:\.[a-z]{2})?-.和两个小写字母的可选序列。
  • \b-字边界

相关问题