正则表达式仅删除特殊字符,而不删除其他语言字母

时间:2018-06-25 07:50:08

标签: java regex string regex-negation

我使用正则表达式从名称中删除特殊字符。该表达式将删除除英语字母之外的所有字母。

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码的特殊字符,这样其他字母就不会被删除,有人可以帮我做一个仅删除特殊字符的正则表达式吗?

3 个答案:

答案 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);