Scala/Java正则匹配中去掉unicode的空格符
作者:互联网
Scala正则匹配中去掉unicode的空格符
在Scala做数据清洗的时候,用str.replaceAll("\\s+","")
的时候有些看不见的字符并不能够被清除掉,比如说
// scala代码:
160.toChar //普通的英文半角空格
12288.toChar //中文空格unicode
8194.toChar //半个中文宽度空格
8195.toChar //一个中文宽度的空格
8196.toChar //四分之一个中文宽度
... //等等还有其它的,我没有收集到
下面如果有一句话我要用\\s+
去掉的话里面的一些空白字符的话:
def main(args: Array[String]): Unit = {
val str:String = s"去掉 这句话${160.toChar.toString}中${12288.toChar.toString}的空白${8194.toChar.toString}字符"
println(str)
println(str.replaceAll("\\s+","|"))
}
结果如下:
从上面的例子中可以看出来,在这个字符串里面只有第一个空格被替换掉了。
我的需求是将所有的空白字符都去掉,但是\\s+
没有帮我去掉unicode
的空白字符。
那么如何去掉uncode
的空格呢?
unicode正则表达式文档
参照上面的这篇文章,我找到了一个方式可以去掉这些unicode
的空白字符,代码如下:
def main(args: Array[String]): Unit = {
val str:String = s"去掉 这句话${160.toChar.toString}中${12288.toChar.toString}的空白${8194.toChar.toString}字符"
println(str)
println(str.replaceAll("[\\p{Space}|\\p{Zs}]+","|"))
}
结果如下:
在上面利用\\p{Zs}
就已经能够达成目标的效果了,利用\\p{Space}
的理由是因为,\\s+
还有一个作用就是能够将\n
这个回车换行符去掉,\\p{Zs}
并不能去掉\n
,\\p{Space}
可以去掉,当然这里的\\p{Space}
也可以换成\\s
结束语
以上就是利用正则表达式去除一些unicode
中的空白字符串的操作,如果你有更好的想法,请在下面留言,谢谢!
标签:字符,unicode,Scala,toChar,空格符,toString,str,去掉 来源: https://blog.csdn.net/OldDirverHelpMe/article/details/104059475