前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一日一技:批量转义正则表达式中的特殊符号

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

作者头像
青南
发布2019-07-15 14:37:39
1.5K0
发布2019-07-15 14:37:39
举报
文章被收录于专栏:未闻Code未闻Code
为了防止出现诈骗行为,我们会对游戏内的聊天记录进行监控。我们发现最近出现了一批神秘的聊天消息,这些消息的特征为:
代码语言:javascript
复制
表情符号微信号好玩

例如:

代码语言:javascript
复制
(^_^)加wei辛8五⑦久久二爸好玩~_>我的Q扣八七3玖二流好玩

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

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

代码语言:javascript
复制
(`ヘ´)(´・ω・`)( ´Д`)( ゚Д゚)┐('~`;)┌ (´∀`)( ´_ゝ`)Σ(゜д゜;)(*´Д`)(─▽─)(゚∀゚)……

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

代码语言:javascript
复制
import rewith 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可以把传给他们的字符串里面,所有有特殊意义的符号前面加上反斜杠,但又不影响正常的字符。

例如:

代码语言:javascript
复制
import reslogan = '你好,{产品经理*_*?'safe_slogan = re.escape(slogan)print(safe_slogan)

运行效果如下图所示:

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

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

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-07-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 未闻Code 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档