我需要从电子邮件地址中删除最后一个标记:
foo+bar@baz.com => foo@baz.com
foo+bar+baz@xyz.com => foo+bar@xyz.com
foo@bar.com => foo@bar.com // no change
这个正则表达式确实有效,但它删除了两个标记,即使它不合适+?
:
\+{1}(.+?)@{1}
我尝试了否定前瞻但它没有按预期工作,仍然删除了两个标记:
\+{1}.+(?!\+).+@{1}
答案 0 :(得分:2)
您可以使用
\+[^+@]+@
并替换为@
。
请参阅regex demo
<强>详情
\+
- 加号[^+@]+
- 除+
和@
以外的一个或多个字符@
- @
(到&#34;锚点&#34;搜索,因此,我们需要用此字符替换)如果只需要在 last +
之前@
之后删除该部分,请使用
(.*)\+[^+@]+(@[^@]*$)
并替换为$1$2
。请参阅this regex demo。
下面,
(.*)
- 第1组:尽可能多地捕获任何0+字符\+[^+@]+
- 见上面的图案(@[^@]*$)
- 第2组:@
,然后是@
以外的0 +字符,直到字符串结尾。