You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Java中移除特定Unicode空白字符的正则表达式疑问

Java中移除特定Unicode空白字符的正则表达式疑问

嗨,这个问题我刚好有相关经验,来给你理清楚!

首先你提到的\p{Zs}|\p{Zl}|\p{Zp}这个正则,其实已经能覆盖绝大多数你列出来的Unicode空白字符了:

  • \p{Zs} 对应的是所有空白分隔符,包括普通空格(U+0020)、非断空格(U+00A0)、各种宽窄空格(U+2000到U+200A、U+202F、U+205F)、表意空格(U+3000),还有你担心的U+1680(Ogham空格标记)——在Java 7及以上的版本里,U+1680已经被归入\p{Zs}类别了,所以这个正则其实已经包含它。
  • \p{Zl} 专门匹配行分隔符(U+2028)
  • \p{Zp} 专门匹配段落分隔符(U+2029)

至于你试的\p{InOgham},这个表达式是用来匹配整个Ogham字符块(U+1680到U+169F)的,这意味着它会把Ogham文字里的其他非空格字符也一并删掉,完全不是你想要的效果。而且部分正则测试网站对这种字符块的语法支持不太好,所以这个方案根本不可取。

如果你的项目还在使用Java 6或更早的版本,那\p{Zs}确实不包含U+1680,这时候你只需要手动把U+1680的Unicode转义\u1680加到正则里就行,最终的正则用法示例:

// Java 7+ 用这个就足够
String cleanedStr = inputStr.replaceAll("[\\p{Zs}\\p{Zl}\\p{Zp}]", "");

// Java 6及以下,补充U+1680的匹配
String cleanedStr = inputStr.replaceAll("[\\p{Zs}\\p{Zl}\\p{Zp}\\u1680]", "");

备注:内容来源于stack exchange,提问作者Alexander Rumanovsk

火山引擎 最新活动