正则文本过滤时的一些注意事项

目的是要过滤掉特殊符号,只保留常规的中文、英文、数字,例如各种表情符号是要过滤掉的

中文范围:\u4e00-\u9fa5
英文范围:a-zA-Z
数字范围:0-9

在正则中,用\w可以代码普通的字符,用\d可以代替数字,但在实践中发现,如果在过滤中使用\w\d来代替的话,有一些特殊字符中会被保留的,也就是没有如期被过滤掉。
当然也可能是我的用法不对,有人知道的话请指正。

如下一个特殊字符:

其ASCII码是\u0e51,经测试,如果用\w来过滤,它是不会被过滤掉的,意思是它属于\w的范围,代码如下(Python语法):

ss = '(๑•̀㉨•́ฅ✧ 早U\小我ki\↖义ir.u9↖\↖〉ik梯△建迷\Ⅰ‘\(‘\汁l\i\义嫩∵迷☆迷茫期末考试o人又寸\义√近近oiii`相义消心o义↖失过了\↖义'
re.sub('[^\w\d\u4e00-\u9fa5]', '', ss)

输出:

๑ฅ早U小米ki义iru9ik梯建迷Ⅰ汁li义嫩迷迷茫期末考试o人又寸义近近oiii相义消心o义失过了义

正则里面用的是\w\d,注意替换后开头的两个特殊符号还在。

下面把\w改为 a-zA-Z

ss = '(๑•̀㉨•́ฅ✧ 早U\小我ki\↖义ir.u9↖\↖〉ik梯△建迷\Ⅰ‘\(‘\汁l\i\义嫩∵迷☆迷茫期末考试o人又寸\义√近近oiii`相义消心o义↖失过了\↖义'
re.sub('[^a-zA-Z\d\u4e00-\u9fa5]', '', ss)

输出:

๑早U小米ki义iru9ik梯建迷汁li义嫩迷迷茫期末考试o人又寸义近近oiii相义消心o义失过了义

前一次输出中的第2个特殊字符没有了。再把\d替换为0-9:

ss = '(๑•̀㉨•́ฅ✧ 早U\小我ki\↖义ir.u9↖\↖〉ik梯△建迷\Ⅰ‘\(‘\汁l\i\义嫩∵迷☆迷茫期末考试o人又寸\义√近近oiii`相义消心o义↖失过了\↖义'
re.sub('[^a-zA-Z0-9\u4e00-\u9fa5]', '', ss)

输出:

早U小米ki义iru9ik梯建迷汁li义嫩迷迷茫期末考试o人又寸义近近oiii相义消心o义失过了义

开头的特殊字符都没有了

posted @ 2018-08-17 15:25  东围居士  阅读(1374)  评论(0编辑  收藏  举报