目的是要过滤掉特殊符号,只保留常规的中文、英文、数字,例如各种表情符号是要过滤掉的
中文范围:u4e00-u9fa5
英文范围:a-zA-Z
数字范围:0-9
在正则中,用w
可以代码普通的字符,用d
可以代替数字,但在实践中发现,如果在过滤中使用w
、d
来代替的话,有一些特殊字符中会被保留的,也就是没有如期被过滤掉。
当然也可能是我的用法不对,有人知道的话请指正。
如下一个特殊字符:
๑
其ASCII码是u0e51
,经测试,如果用w
来过滤,它是不会被过滤掉的,意思是它属于w
的范围,代码如下(Python语法):
ss = '(๑•̀㉨•́ฅ✧ 早U小我ki↖义ir.u9↖↖〉ik梯△建迷Ⅰ‘(‘汁li义嫩∵迷☆迷茫期末考试o人又寸义√近近oiii`相义消心o义↖失过了↖义'
re.sub('[^wdu4e00-u9fa5]', '', ss)
输出:
๑ฅ早U小米ki义iru9ik梯建迷Ⅰ汁li义嫩迷迷茫期末考试o人又寸义近近oiii相义消心o义失过了义
正则里面用的是wd
,注意替换后开头的两个特殊符号还在。
下面把w
改为 a-zA-Z
:
ss = '(๑•̀㉨•́ฅ✧ 早U小我ki↖义ir.u9↖↖〉ik梯△建迷Ⅰ‘(‘汁li义嫩∵迷☆迷茫期末考试o人又寸义√近近oiii`相义消心o义↖失过了↖义'
re.sub('[^a-zA-Zdu4e00-u9fa5]', '', ss)
输出:
๑早U小米ki义iru9ik梯建迷汁li义嫩迷迷茫期末考试o人又寸义近近oiii相义消心o义失过了义
前一次输出中的第2个特殊字符没有了。再把d
替换为0-9:
ss = '(๑•̀㉨•́ฅ✧ 早U小我ki↖义ir.u9↖↖〉ik梯△建迷Ⅰ‘(‘汁li义嫩∵迷☆迷茫期末考试o人又寸义√近近oiii`相义消心o义↖失过了↖义'
re.sub('[^a-zA-Z0-9u4e00-u9fa5]', '', ss)
输出:
早U小米ki义iru9ik梯建迷汁li义嫩迷迷茫期末考试o人又寸义近近oiii相义消心o义失过了义
开头的特殊字符都没有了