zoukankan      html  css  js  c++  java
  • 正则文本过滤时的一些注意事项

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

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

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

    如下一个特殊字符:

    其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义失过了义
    

    开头的特殊字符都没有了

  • 相关阅读:
    h5及c3新增的一些内容
    Ajax实现步骤和原理
    prototype和__proto__的关系是什么?
    深拷贝与浅拷贝
    promise与async和await的区别
    ph

    p
    python4
    python3
  • 原文地址:https://www.cnblogs.com/wuzhiblog/p/python_filter_special_character.html
Copyright © 2011-2022 走看看