我有一个包含文本、控制字符、数字、变音符号(德语)和其他 utf8 字符的字符串。
我想去除所有不是“语言的一部分”的 utf8 字符。像(非完整列表)“:/\ßä,;\n\t”这样的特殊字符应该全部保留。
遗憾的是,stackoverflow 删除了所有这些字符,因此我必须附加一张图片 ( link)。
有什么想法吗?非常感谢您的帮助!
PS:如果有人确实知道一种不会杀死那些特殊字符的粘贴服务,我会很乐意上传这些字符串。我只是找不到。
[编辑]:我认为正则表达式“\P{Cc}”都是我想要保留的字符。是否可以反转此正则表达式以便返回所有不匹配此正则表达式的字符?
最佳答案
您已经找到了 Unicode 字符属性。
您可以通过更改前导“p”的大小写来反转字符属性
例如
\p{L}
匹配所有字母
\P{L}
匹配所有没有字母属性的字符。
因此,如果您认为 \P{Cc}
是您需要的,那么 \p{Cc}
将匹配相反的内容。
有关 regular-expressions.info 的更多详细信息
我很确定 \p{Cc}
接近你想要的,但要小心,它确实包括,例如制表符 (0x09)、换行符 (0x0A) 和回车符 (0x0D)。
但是你可以创建你自己的角色类,像这样:
[^\P{Cc}\t\r\n]
这个类 [^...]
是一个否定字符类,所以这将匹配所有不是“非控制字符”的东西(双重否定,所以它匹配控制字符),而不是制表符、CR 和 LF。
关于java - 从 String 中删除除 controlchars 之外的不可打印的 utf8 字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15520791/