首页 > 解决方案 > 正则表达式仅删除特殊字符而不删除其他语言字母

问题描述

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

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码的特殊字符,这样其他字母就不会被删除,有人可以帮助我使用只删除特殊字符的正则表达式。

标签: javaregexstringregex-negation

解决方案


您可以使用\p{IsLatin}\p{IsAlphabetic}

name = name.replaceAll("[^\\p{IsLatin}]", " ").trim();

或者要删除标点符号,只需\p{Punct}像这样使用:

name = name.replaceAll("\\p{Punct}", " ").trim();

输出

Özcan Sevim

查看正则表达式结构摘要的完整列表,并使用可以帮助您的那个。


推荐阅读