正则文本过滤时的一些注意事项
目的是要过滤掉特殊符号,只保留常规的中文、英文、数字,例如各种表情符号是要过滤掉的
中文范围:\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义失过了义
开头的特殊字符都没有了
(本文完)
--------------------------------------------------------------------------------------------------------------------------
致虚极,守静笃
使用我的阿里云幸运券,购买阿里云ECS有优惠:阿里云幸运券
>>>>> 腾讯云新用户优惠 <<<<<
--------------------------------------------------------------------------------------------------------------------------
致虚极,守静笃
使用我的阿里云幸运券,购买阿里云ECS有优惠:阿里云幸运券
>>>>> 腾讯云新用户优惠 <<<<<