如何使用正则表达式替换电子邮件地址的一部分?

3

我想使用正则表达式替换电子邮件地址的一部分。怎么做?

例如:有一个电子邮件地址test.email+alex@gmail.com,我想用''替换从+@之前的那部分,以便最后的字符串将是test.email@gmail.com

我尝试使用以下代码:

str.replaceAll("[^+[a-z]]","");
2个回答

5
你可以尝试使用这个:
\+[^@]*

解释:

  1. \+匹配+,其中\是转义字符
  2. [^@]*匹配任何东西,直到到达@,其中*表示零个或多个

以下是代码:

final String string = "test.email+alex@gmail.com";
final Pattern pattern = Pattern.compile("\\+[^@]*");
final Matcher matcher = pattern.matcher(string);    
final String result = matcher.replaceAll("");

正则表达式测试案例


嘿,如果我也想在“@”之前删除“.”(点),那么该怎么写? - Manish

1
如果您想匹配点或加号直到@,您可以使用正向先行断言来断言右侧的@对于两种情况都有效,并使用 alternation列出每个选项。
(?:\.|\+[^@]*)(?=.*@)

解释

  • (?: 非捕获组
    • \. 匹配一个点
    • | 或者
    • \+[^@]* 匹配 + 和 0 次或多次除了点以外的任何字符
  • ) 关闭组
  • (?=.*@) 正向先行断言,断言右边有一个 @

正则表达式演示 | Java 演示

在 Java 中

str.replaceAll("(?:\\.|\\+[^@]*)(?=.*@)","")

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接