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

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}]", "")

iOS版MOJi辞書在进入收藏夹界面时列表会上下抖动的问题排查及修复

在MOJi辞書早些版本,也就是还未添加启用完整展示功能(单词例句内容完整显示)之前,我们每次点击收藏夹Cell进入收藏夹信息界面时,列表在数据请求回来然后展示没有什么异常的现象。

当加入启用完整展示功能后,经同僚测试并发现:每次进入收藏夹信息界面时,列表会上下抖动。但我总是无法重现该现象,后面我怀疑是不是代码上哪里写的有问题,导致系统出现该bug,后面就联想到自动计算高度的问题(因为我们是用xib创建的Cell,同时又是开关方式决定显示内容长度),想到了UITableViewAutomaticDimension。果不其然,我去掉自动计算高度,采用原来固定的cell的高度时,就不会出现抖动的问题了。

但是,我们又需要这个自动计算的功能(如果不用该方式去自动计算,采用传统的先计算高度,保存到内存缓存再获取后展示,然后关闭启用完整展示功能又要计算多一次,这样实现过于繁琐)。后面做了各种尝试,实在没办法解决,又不能影响当前工作进度,暂时搁置了。

后来,开始做收藏夹列表过滤的功能,由于当时自认为考虑到列表滑动的流畅度,而把word、example、sentence、news、folder等target各自独立成一个MOJiFavTargetCell,但现在如果做这个过滤功能,非Folder类型的Cell都需要展示target文件夹所属,如下图所示:

筛选单词效果图

所以,我需要给多个Cell添加这个来源视图控件。这种实现突然发现很不好,重复作业太多。咬咬牙,花业余时间重新整成一个控件去实现(自己折腾自己),这控件定义为MOJiFavCell。当该功能完成后,开始对其进行各种测试,其中一个测试环节是主题字体切换效果展示测试:根据不同样式的字体效果,看看Cell的展示是否正常。

神助啊!!!

突然发现,主题字体如果切换到魔性、清新、厚实这三个风格后,进入文件夹信息界面时列表依旧抖动的很厉害,而且是必现!然后回过头来尝试用回默认字体去测试,居然不会抖动!立马就得出一个结论:使用不同的字体样式,系统在自动计算Cell高度时结果可能会有偏差。

紧接着,认真看了下MOJiFavCell里面会影响自动计算高度的控件(一个是titleL、一个是subtitleL)。那如果有偏差,我就尝试减少需要自动计算的控件,直接把subtitleL的高度固定死(假设给个24pt),只让系统计算titleL的高度即可。最后经过测试每个主题字体风格后,进入收藏夹信息界面,列表不再抖动。这时候已经很激动了!!!

最后,由于MOJiFavCell里面新增了文件夹来源视图(这里在代码里称为SourceV,高度就是24pt),直接让titleLBottom To SourceVTop,然后subtitleL保持与SourceV的CenterY一致,也可以达到设计稿上的展示效果。


总结:

使用不同的字体样式,系统在自动计算Cell高度时结果可能会有偏差,根据需求做出相应的调整即可。