除控制字符外,从字符串中删除非可打印的UTF-8字符

6
我有一个包含文本、控制字符、数字、德语umlauts和其他utf8字符的字符串。
我想要去除所有不是“语言部分”的utf8字符。特殊字符如(非完整列表)“:/ \ ßä、; \ n \ t”都应该被保留。
不幸的是,stackoverflow删除了所有这些字符,所以我必须附上一张图片(link)。
有任何想法吗?非常感谢帮助!
PS:如果有人知道一个不会杀死这些特殊字符的粘贴服务,我将非常高兴上传字符串..我只是找不到一个..
[编辑]:我认为正则表达式“\ P {Cc}”是我想保留的所有字符。这个正则表达式是否可以被反转,以便返回所有不匹配这个正则表达式的字符?

不确定,但是可能反转版本的 \P{something} 可以是 \p{something}。如果不行,你可以尝试使用 [^\P{something}]。 - Pshemo
@Pshemo 是的,小写似乎可以像下面发布的那样工作...谢谢! - friesoft
2个回答

9

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

通过更改首字母 "p" 的大小写,可以反转字符属性。

例如:

\p{L} 匹配所有字母

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

因此,如果您认为 \P{Cc} 是您所需的内容,则 \p{Cc} 将匹配相反的结果。

有关更多详细信息,请参见regular-expressions.info

我非常确定 \p {Cc} 接近您想要的内容,但是请小心,它确实包括例如制表符(0x09),换行符(0x0A)和回车符(0x0D)等内容。

但是,您可以创建自己的字符类,方法如下:

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

这个类[^...]是一个否定字符类,因此它会匹配所有不是“非控制字符”的内容(双重否定,所以它匹配控制字符),但不包括制表符、回车和换行符。

非常好!谢谢,我不知道那个..看来我真的得多读一些正则表达式教程了... - friesoft
@friesoft,换行符正则表达式为\r|\n|\r\n,因此 \p{Cc}|\r|\n|\r\n 应该能满足您的需求。 - sp00m

0

你可以使用,

your_string.replaceAll("\\p{C}", "");

2
不,那样会删掉太多内容,但是@stema的答案已经可以使用了 :) - friesoft

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