【问题标题】:Remove non printable utf8 characters except controlchars from String从 String 中删除除 controlchars 之外的不可打印的 utf8 字符
【发布时间】:2013-03-09 09:14:02
【问题描述】:

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

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

遗憾的是,stackoverflow 删除了所有这些字符,所以我必须附加一张图片 (link)。

有什么想法吗?非常感谢您的帮助!

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

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

【问题讨论】:

标签: java regex non-printing-characters


【解决方案1】:

您已经找到了 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。

【讨论】:

  • 非常好!谢谢我不知道..我想我真的需要阅读更多的正则表达式教程......
  • @friesoft 换行正则表达式是\r|\n|\r\n,所以\p{Cc}|\r|\n|\r\n应该适合你的需要。
【解决方案2】:

你可以使用,

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

【讨论】:

  • 不,删除太多,但@stema 的答案已经有效:)
猜你喜欢
  • 2023-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-08
  • 2016-10-08
  • 2012-06-16
  • 2020-03-18
  • 1970-01-01
相关资源
最近更新 更多