如何从字符串中删除电子邮件地址?还有所有其他数字和特殊字符?
示例字符串可以是
"Hello world my # is 123 mail me @ test@test.com"
输出字符串应为
"Hello world my is mail me"
我用Google搜索,发现我可以使用以下正则表达式
"[^A-Za-z0-9\\.\\@_\\-~#]+"
但该示例更多的是检查有效的电子邮件ID而不删除它。 我是java新手!
答案 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。