Java 从不包括非拉丁字符的字符串中删除所有特殊字符

Java 从不包括非拉丁字符的字符串中删除所有特殊字符,java,regex,string,replace,Java,Regex,String,Replace,我想删除字符串中除数字和普通a-z字符以外的所有特殊字符 我是这样做的: text = text.replaceAll("[^a-zA-Z0-9 ]+", ""); 这种方法的问题是,它还将删除所有非拉丁字符,如è、è、è和其他许多字符 我所说的非特殊字符(我想保留的字符)是指所有语言的所有数字和字母字符,或者至少是尽可能多的数字和字母字符 如何只删除特殊字符?我知道你说的是regex,但如果可以选择番石榴: 您可以对所有字母尝试\p{L},对所有数字尝试\p{N}: text = text.

我想删除字符串中除数字和普通a-z字符以外的所有特殊字符

我是这样做的:

text = text.replaceAll("[^a-zA-Z0-9 ]+", "");
这种方法的问题是,它还将删除所有非拉丁字符,如è、è、è和其他许多字符

我所说的非特殊字符(我想保留的字符)是指所有语言的所有数字和字母字符,或者至少是尽可能多的数字和字母字符

如何只删除特殊字符?

我知道你说的是regex,但如果可以选择番石榴:


您可以对所有字母尝试
\p{L}
,对所有数字尝试
\p{N}

text = text.replaceAll("[^\\p{L}\\p{N} ]+", "");

也许你应该定义什么是特殊字符。哪个集合更大?@SotiriosDelimanolis特殊字符在所有语言中都是除数字和字母以外的所有字符。+1尽管你不需要量词,你可以使用
\\P
而不是类否定。试过
[\\P{L}\\P{N}]+
后,它吃掉了所有字符:|因为第二个术语取消了第一个。你得换两次。不幸的是,
Alnum
posix不能使用Unicode。。。
text = text.replaceAll("[^\\p{L}\\p{N} ]+", "");