java - 从 String 中删除除 controlchars 之外的不可打印的 utf8 字符

标签 java regex non-printing-characters

我有一个包含文本、控制字符、数字、变音符号(德语)和其他 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/

相关文章:

javascript - 通过正则表达式获取号码

regex - Clojure 正则表达式匹配

angularjs - 如何强制 angular.js 接受绑定(bind)中的尾随空格?

windows - 是否可以在 batch/cmd 中回显一些不可打印的字符?

java - 使用 Java 8 将 ms 转换为字符串日期

java - 在java类中创建实例

java - 使用 Java 中的双倍长度 3DES key 进行加密并生成 16 字节数组密码

java - 服务器对浏览器的响应 : calling the doGet Method Java

php - 正则表达式 - 为什么这个 .*(点星号)不匹配换行符?

sql-server - 在批量插入查询中使用不可打印的字符(\0\n\t 除外)作为字段终止符参数