gpt4 book ai didi

java - 通过正则表达式删除所有非打印字符

转载 作者:行者123 更新时间:2023-12-04 15:05:57 26 4
gpt4 key购买 nike

我有包含非打印字符的文件,例如 \u2066-\u2069 (定向格式)和 \u2000-\u2009 (各种宽度的空格,例如   )。是否可以使用(Java)正则表达式删除(或替换)它们? ( \\s+ 不适用于上述情况)。我不想自己构建这个,因为我不知道我可能会得到什么角色。

最佳答案

您提供的所有字符都属于分隔符、空格 Unicode 类别,因此,您可以使用

s = s.replaceAll("\\p{Zs}+", " ");
Zs Unicode 类别代表任何类型的空格分隔符(请参阅文档中的 more cateogry names)。

要用您可以使用的单个常规 ASCII 空间替换所有水平空格
s = s.replaceAll("\\h+", " ");

根据 Java regex documentation ,

\h     A horizontal whitespace character: [ \t\xA0\u1680\u180e\u2000-\u200a\u202f\u205f\u3000]



如果要将所有 Unicode 空格缩小为一个空格
s = s.replaceAll("(?U)\\s+", " ");
(?U)是一个嵌入标志选项,等于 Pattern.UNICODE_CHARACTER_CLASS 选项传递给 Pattern.compile方法。没有它, \s匹配什么 \p{Space}匹配,即 [ \t\n\x0B\f\r] .一旦你通过 (?U) ,它将开始匹配 Unicode 表中的所有空白字符。

要标记一个字符串,你可以直接用
String[] tokens = s.split("\\p{Zs}+");
String[] tokens = s.split("\\h+");
String[] tokens = s.split("(?U)\\s+");

关于java - 通过正则表达式删除所有非打印字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58656881/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com