正则表达式-匹配标点符号、数字及分隔符

string testStr = "你好,测试。";
Regex reg = new Regex(@"\p{P}");
testStr = reg.Replace(testStr, "");

Unicode 编码并不只是为某个字符简单定义了一个编码,而且还将其进行了归类。 

\pP 其中的小写 p 是 property 的意思,表示 Unicode 属性,用于 Unicode 正表达式的前缀。 

大写 P 表示 Unicode 字符集七个字符属性之一:标点字符。 

其他六个是 

L:字母; 
M:标记符号(一般不会单独出现); 
Z:分隔符(比如空格、换行等); 
S:符号(比如数学符号、货币符号等); 
N:数字(比如阿拉伯数字、罗马数字等); 
C:其他字符 

上面这七个是属性,七个属性下还有若干个子属性,用于更进一步地进行细分。 

Java 中用于 Unicode 的正则表达式数据都是由 Unicode 组织提供的。 

Unicode 正则表达式标准(可以找到所有的子属性) 
http://www.unicode.org/reports/tr18/ 

各 Unicode 字符属性的定义,可以用一看看某个字符具有什么属性。 
http://www.unicode.org/Public/UNIDATA/UnicodeData.txt 

最近因为在处理一些特殊的文本内容,需要对文本内容进行过滤,因此想到了是用正则表达式,尤其是需要过滤其中的标点符号、数字符号还有分隔符之类的。原本想用枚举之类的,把所有的这些字符都一一列出来,但是从找的资料来说符号有很多,既有中文的又有英文的。

英文标点符号比较多,如,(逗号)、。(点号)、?(问号)、:(冒号)、;(分号)、‘’(单引号)、!(感叹号)、“”(双引号)、—(连接号)、——(破折号)、……(省略号)、()(小括号)、【】(中括号)、{}(大括号)、(顿号)、《》书名号等。以下正则表达式能够验证英文标点符号。

参考:http://blog.sina.com.cn/s/blog_6faf711d0101eeso.html

因此最终选择 Unicode 集合来解决,既快捷又方便

content.replaceAll("[\\p{P}|\\p{Z}}|\\p{N}}|\\p{S}]", "")