6

我有一个包含文本、控制字符、数字、变音符号(德语)和其他 utf8 字符的字符串。

我想去掉所有不是“语言的一部分”的 utf8 字符。(非完整列表)“:/\ßä,;\n \t”等特殊字符应全部保留。

可悲的是,stackoverflow 删除了所有这些字符,所以我必须附加一张图片(链接)。

有任何想法吗?非常感谢帮助!

PS:如果有人知道不会杀死那些特殊字符的粘贴服务,我会很乐意上传字符串..我只是找不到..

[编辑]:我认为正则表达式“\P{Cc}”是我想要保留的所有字符。可以反转这个正则表达式,以便返回所有不匹配这个正则表达式的字符吗?

4

2 回答 2

9

您已经找到了 Unicode 字符属性。

您可以通过更改前导“p”的大小写来反转字符属性

例如

\p{L}匹配所有字母

\P{L}匹配所有没有属性字母的字符。

所以如果你认为\P{Cc}是你所需要的,那么\p{Cc}会适得其反。

有关正则表达式的更多详细信息。信息

我很确定\p{Cc}它接近你想要的,但要小心,它确实包括制表符 (0x09)、换行符 (0x0A) 和回车符 (0x0D)。

但是您可以创建自己的角色类,如下所示:

[^\P{Cc}\t\r\n]

这个类[^...]是一个否定字符类,所以它会匹配所有不是“非控制字符”的东西(双重否定,所以它匹配控制字符),而不是制表符、CR 和 LF。

于 2013-03-20T10:29:01.227 回答
0

您可以使用,

your_string.replaceAll("\\p{C}", "");
于 2013-03-20T10:24:34.993 回答