我有一个包含文本,控制字符,数字,变音符号(德语)和其他utf8字符的字符串。
我想删除所有不是“语言的一部分”的utf8字符。特殊字符如(非完整列表)“:/ \ßä,; \ n \ t”都应保留。
遗憾的是,stackoverflow删除了所有这些字符,因此我必须附加图片(link)。
有什么想法吗?非常感谢帮助!
PS:如果有人知道一个不会杀死那些特殊字符的粘贴服务,我会很乐意上传字符串..我只是找不到一个......
[编辑]:我认为正则表达式“\ P {Cc}”是我想要保留的所有字符。这个正则表达式是否可以反转,以便返回与正则表达式不匹配的所有字符?
答案 0 :(得分:8)
您已经找到了Unicode字符属性。
您可以通过更改前导“p”
的大小写来反转字符属性e.g。
\p{L}
匹配所有字母
\P{L}
匹配所有没有属性字母的字符。
因此,如果您认为\P{Cc}
是您所需要的,那么\p{Cc}
就会与之相反。
我很确定\p{Cc}
接近你想要的,但要小心,它包括,例如选项卡(0x09),换行符(0x0A)和回车符(0x0D)。
但你可以创建自己的角色类,如下所示:
[^\P{Cc}\t\r\n]
这个类[^...]
是一个否定的字符类,所以这将匹配所有不是“非控制字符”(双重否定,因此它匹配控制字符),而不是制表符,CR和LF。
答案 1 :(得分:0)
你可以使用,
your_string.replaceAll("\\p{C}", "");