正则表达式:去除Unicode

Posted arthemis-z

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了正则表达式:去除Unicode相关的知识,希望对你有一定的参考价值。

背景:最近在做中文分词的时候,发现分词后的数据中出现很多特殊字符,即使进行了去停用词操作,但是特殊字符太多,也不可能都加到停用词里,所以就准备用正则去掉,正则很简单,直接上代码:

    /**
     * 正则去掉unicode等特殊字符
     * */
    private static String regularFilter(String text) {
        /**
         * p{L}或p{Letter}:来自任何语言的任何形式的字母。
         *      p{Ll}或p{Lowercase_Letter}:小写字母,带有大写字母。
         *      p{Lu}或p{Uppercase_Letter}:具有小写字母变体的大写字母。
         *      p{Lt}或p{Titlecase_Letter}:仅当单词的第一个字母大写时,出现在单词开头的字母。
         *      p{L&}或p{Cased_Letter}:存在小写和大写变体(Ll,Lu和Lt的组合)的字母。
         *      p{Lm}或p{Modifier_Letter}:一个特殊字符,用作字母。
         *      p{Lo}或p{Other_Letter}:没有小写和大写变体的字母或表意文字。
         * p{M}或p{Mark}:打算与另一个字符组合的字符(例如重音符号,变音符,封闭框等)。
         *      p{Mn}或p{Non_Spacing_Mark}:旨在与另一个字符组合而又不占用多余空间(例如重音符号,变音符号等)的字符。
         *      p{Mc}或p{Spacing_Combining_Mark}:一个字符,旨在与另一个占用额外空间的字符组合(许多东方语言中的元音符号)。
         *      p{Me}或p{Enclosing_Mark}:一个字符,它将与之组合的字符括起来(圆形,正方形,键帽等)。
         * p{Z}或p{Separator}:任何类型的空格或不可见的分隔符。
         *      p{Zs}或p{Space_Separator}:一个不可见但占用空间的空白字符。
         *      p{Zl}或p{Line_Separator}:行分隔符U + 2028。
         *      p{Zp}或p{Paragraph_Separator}:段落分隔符U + 2029。
         * p{S}或p{Symbol}:数学符号,货币符号,装饰符号,画框的字符等。
         *      p{Sm}或p{Math_Symbol}:任何数学符号。
         *      p{Sc}或p{Currency_Symbol}:任何货币符号。
         *      p{Sk}或p{Modifier_Symbol}:组合字符(标记)本身就是完整字符。
         *      p{So}或p{Other_Symbol}:不是数学符号,货币符号或组合字符的各种符号。
         * p{N}或p{Number}:任何脚本中的任何数字字符。
         *      p{Nd}或p{Decimal_Digit_Number}:除表意文字外,任何文字中的数字从零到九。
         *      p{Nl}或p{Letter_Number}:看起来像字母的数字,例如罗马数字。
         *      p{No}或p{Other_Number}:上标或下标数字,或者不是0到9的数字(表意文字中的数字除外)。
         * p{P}或p{Punctuation}:任何一种标点符号。
         *      p{Pd}或p{Dash_Punctuation}:任何类型的连字符或破折号。
         *      p{Ps}或p{Open_Punctuation}:任何类型的左括号。
         *      p{Pe}或p{Close_Punctuation}:任何类型的右括号。
         *      p{Pi}或p{Initial_Punctuation}:任何形式的开头引号。
         *      p{Pf}或p{Final_Punctuation}:任何形式的结束语。
         *      p{Pc}或p{Connector_Punctuation}:标点符号,例如连接单词的下划线。
         *      p{Po}或p{Other_Punctuation}:不是破折号,方括号,引号或连接符的任何一种标点符号。
         * p{C}或p{Other}:不可见的控制字符和未使用的代码点。
         *      p{Cc}或p{Control}:ASCII或Latin-1控制字符:0x00–0x1F和0x7F–0x9F。
         *      p{Cf}或p{Format}:不可见的格式指示符。
         *      p{Co}或p{Private_Use}:保留供私人使用的任何代码点。
         *      p{Cs}或p{Surrogate}:采用UTF-16编码的一对代理对的一半。
         *      p{Cn}或p{Unassigned}:未分配任何字符的任何代码点。
         * */
        // 替换成",",防止本来不是一起的词被分配到一起影响分词结果,同时","会被停用词去掉
        return text.replaceAll("[\pM\pZ\pS\pN\pP\pC]+", ",");
    }

如代码中注释所示,通过使用正则来匹配Unicode所属类别,直接过滤掉了Unicode,非常方便!

注意的是,正则中没有使用“p{L}”,这是因为“p{L}”也会过滤掉中文字符,需要注意,其它的自己看说明并尝试下,就比较清楚了!

参考资料:http://www.regular-expressions.info/unicode.html

 

以上是关于正则表达式:去除Unicode的主要内容,如果未能解决你的问题,请参考以下文章

Java正则之Unicode属性匹配的那些事

Java正则之Unicode属性匹配的那些事

java正则表达式去除html标签

MyEclipse去除网上复制下来的代码带有的行号(使用正则表达式)

Perl 正则表达式匹配大型 Unicode 代码点

网页爬虫中\xa0、\u3000等字符的解释及去除