pet*_*ust 6 java regex unicode
我的文件包含非打印字符,例如\u2066-\u2069
(方向格式)和\u2000-\u2009
(各种宽度的空间,例如 
)。是否可以使用(Java)正则表达式删除(或替换)它们?(\\s+
不适用于上述情况)。我不想自己构建它,因为我不知道我会得到什么样的角色。
您提供的所有字符都属于分隔符、空格Unicode 类别,因此,您可以使用
s = s.replaceAll("\\p{Zs}+", " ");
Run Code Online (Sandbox Code Playgroud)
UnicodeZs
类别代表任何类型的空格分隔符(请参阅文档中的更多类别名称)。
要将所有水平空格替换为单个常规 ASCII 空格,您可以使用
s = s.replaceAll("\\h+", " ");
Run Code Online (Sandbox Code Playgroud)
根据Java 正则表达式文档,
\h
水平空白字符:[ \t\xA0\u1680\u180e\u2000-\u200a\u202f\u205f\u3000]
如果要将所有 Unicode 空格缩小为单个空格
s = s.replaceAll("(?U)\\s+", " ");
Run Code Online (Sandbox Code Playgroud)
这(?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+");
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
71 次 |
最近记录: |