我使用正则表达式从名称中删除特殊字符。该表达式将删除除英语字母之外的所有字母。
public static void main(String args[]) {
String name = "Özcan Sevim.";
name = name.replaceAll("[^a-zA-Z\\s]", " ").trim();
System.out.println(name);
}
输出:
zcan Sevim
预期输出:
Özcan Sevim
这样做会导致结果不好,正确的方法是删除基于ASCII码的特殊字符,这样其他字母就不会被删除,有人可以帮我做一个仅删除特殊字符的正则表达式吗?
答案 0 :(得分:9)
您可以使用\p{IsLatin}
或\p{IsAlphabetic}
name = name.replaceAll("[^\\p{IsLatin}]", " ").trim();
或者要删除标点符号,只需使用\p{Punct}
就像这样:
name = name.replaceAll("\\p{Punct}", " ").trim();
输出
Özcan Sevim
查看Summary of regular-expression constructs的完整列表并使用可以帮助您的列表。
答案 1 :(得分:0)
为此使用Guava CharMatcher :)它将更易于阅读和维护。
name = CharMatcher.ASCII.negate().removeFrom(name);
答案 2 :(得分:-1)
使用[\ W +]或“ [^ a-zA-Z0-9]”作为正则表达式以匹配任何特殊字符,还使用String.replaceAll(regex,String)将spl字符替换为空字符串。记住,作为String.replaceAll的第一个参数,您必须用反斜杠对其进行转义以将em视为文字字符。
String string= "hjdg$h&jk8^i0ssh6";
Pattern pt = Pattern.compile("[^a-zA-Z0-9]");
Matcher match= pt.matcher(string);
while(match.find())
{
String s= match.group();
string=string.replaceAll("\\"+s, "");
}
System.out.println(string);