一日一技:批量转义正则表达式中的特殊符号

为了防止出现诈骗行为,我们会对游戏内的聊天记录进行监控。我们发现最近出现了一批神秘的聊天消息,这些消息的特征为:

表情符号微信号好玩

例如:

(^_^)加wei辛8五⑦久久二爸好玩
~_>我的Q扣八七3玖二流好玩

这些聊天记录总是以表情符号开头,以 好玩结尾。为了屏蔽这些诈骗信息,我们想到使用正则表达式。

我们收集整理了上千个颜文字:

(`ヘ´)
(´・ω・`)
( ´Д`)
( ゚Д゚)
┐('~`;)┌ 
(´∀`)
( ´_ゝ`)
Σ(゜д゜;)
(*´Д`)
(─▽─)
(゚∀゚)
……

设想在Python里面读取这些颜文字,然后构造正则表达式:

import re
with open('emotion.txt', encoding='utf-8') as f:
    emotion_list = [x.strip() for x in f]
for emotion in emotion_list:
    pattern = f'{emotion}.*?好好玩'
    re.search(pattern, content)
    ...

但在实际使用过程中,我们发现颜文字里面有非常多的小括号、中括号、大括号、星号、点号、问号之类的符号,这些符号在正则表达式里面有特殊用途,如果直接评价成一个pattern,就会导致正则表达式匹配出问题。

当然我们可以使用replace一个一个给这些特殊符号左边添加反斜杠。但是这样写太过麻烦。

在Python里面,正则表达式模块已经帮我们实现了这个功能—— re.escape

re.escape可以把传给他们的字符串里面,所有有特殊意义的符号前面加上反斜杠,但又不影响正常的字符。

例如:

import re
slogan = '你好,{产品经理*_*?'
safe_slogan = re.escape(slogan)
print(safe_slogan)

运行效果如下图所示:

特别注意:在Python 3.6或之前版本,除了Ascii字符之外的其他字符都会被加上反斜杠。

从Python 3.7开始,只有在正则表达式里面有特殊意义的符号才会被加上反斜杠。

所以还在用老版本Python的同学,快点换到新版本来吧。

每日留言

说说你做过那些让人抓狂的事情?

或者一句激励自己的话?

(字数不少于15字)

今天放个人微信二维码出来,限量加好友。记得附个人简介,说不定能一起搞事呢


近期推荐阅读:

【1】整理了我开始分享学习笔记到现在超过250篇优质文章,涵盖数据分析、爬虫、机器学习等方面,别再说不知道该从哪开始,实战哪里找了

【2】【终篇】Pandas中文官方文档:基础用法6(含1-5)

觉得不错就点一下“在看”吧 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值