从字符串中删除所有特殊字符,但不包括非拉丁字符。

5

我希望从字符串中删除所有特殊字符,只保留数字和普通的a-z字符。

我是这样做的:

text = text.replaceAll("[^a-zA-Z0-9 ]+", "");

使用这种方法的问题是它也会删除所有非拉丁字符,如è,é,ê,ë和许多其他字符。

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

我该如何只删除特殊字符?


1
也许你应该定义一下什么是特殊字符。哪个集合更大? - Sotirios Delimanolis
@SotiriosDelimanolis 特殊字符是指所有语言中除数字和字母以外的所有字符。 - Aki K
2个回答

3
你可以尝试使用\p{L}表示所有字母,\p{N}表示所有数字:
text = text.replaceAll("[^\\p{L}\\p{N} ]+", "");

+1虽然您不需要量词,而且可以使用\\P代替类否定。 - Mena
尝试使用 [\\P{L}\\P{N} ]+,结果它吞掉了所有东西 :| - Sabuj Hassan
因为第二项抵消了第一项。你需要替换两次。不幸的是,Alnum posix 无法与 Unicode 兼容... - Mena

1

我知道你说过正则表达式,但如果guava是一个选项:

CharMatcher.JAVA_LETTER_OR_DIGIT.retainFrom("èêAAAGRt123")

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接