从java字符串中删除电子邮件地址

时间:2009-12-30 19:58:35

标签: java regex

如何从字符串中删除电子邮件地址?还有所有其他数字和特殊字符?

示例字符串可以是

"Hello world my # is 123 mail me @ test@test.com"

输出字符串应为

"Hello world my is mail me"

我用Google搜索,发现我可以使用以下正则表达式

"[^A-Za-z0-9\\.\\@_\\-~#]+"

但该示例更多的是检查有效的电子邮件ID而不删除它。 我是java新手!

4 个答案:

答案 0 :(得分:3)

正如其他人所指出的,您可以使用正则表达式来清理String并用空字符串""替换不需要的部分。为此,请查看String类的replaceAll(String regex, String replacement)方法,并在Pattern类中查看Java中正则表达式的语法。

下面,一些代码演示了一种清理提供的示例String的方法(虽然可能不是最优雅的):

String input = "Hello world my # is 123 mail me @ test@test.com";
String EMAIL_PATTERN = "([^.@\\s]+)(\\.[^.@\\s]+)*@([^.@\\s]+\\.)+([^.@\\s]+)";

String output = input.replaceAll(EMAIL_PATTERN, "") // Replace emails 
                                                    // by an empty string
        .replaceAll("\\p{Punct}", "") // Replace all punctuation. One of
                                      // !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~
        .replaceAll("\\d", "") // Replace any digit by an empty string
        .replaceAll("\\p{Blank}{2,}+", " "); // Replace any Blank (a  space or 
                                             // a tab) repeated more than once
                                             // by a single space.

System.out.println(output);

运行此代码会产生以下输出:

Hello world my is mail me 

如果你需要删除更多的垃圾(或更少,比如标点符号),那么你就有了这个原则。根据您的需求进行调整。

答案 1 :(得分:2)

您可以使用String#replaceAll()。只需让它用空字符串""替换任何正则表达式匹配。你提到的正则表达式不是很强大。一个更好的是(copied from here并略微改变以用于普通香草文本):

string = string.replaceAll("([^.@\\s]+)(\\.[^.@\\s]+)*@([^.@\\s]+\\.)+([^.@\\s]+)", "");

希望这有帮助。

答案 2 :(得分:1)

查看Java正则表达式Pattern类及其用法。有一个useful tutorial here,其中包含replacement methods

旁白:this是一个特别强大的正则表达式,可用于符合RFC822的电子邮件地址:-)您应该能够根据自己的需求提供更简洁的内容!讨论了电子邮件正则表达式和权衡取舍here

答案 3 :(得分:0)

从您的示例中看,它不仅仅是您要删除的电子邮件地址,而是所有非字母字符,因此这很简单:

str = str.replaceAll("([^.@\\s]+)(\\.[^.@\\s]+)*@([^.@\\s]+\\.)+([^.@\\s]+)", "")
         .replaceAll("[^\\p{Alpha} ]", "")
         .replaceAll("[ ]{2,}+", " ");

有关特殊字符类\p{Alpha}的含义的信息,请参阅the Pattern JavaDocs