正则表达式:去除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的主要内容,如果未能解决你的问题,请参考以下文章