本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《
为了防止出现诈骗行为,我们会对游戏内的聊天记录进行监控。我们发现最近出现了一批神秘的聊天消息,这些消息的特征为:
-
表情符号微信号好玩
例如:
(^_^)加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的同学,快点换到新版本来吧。
1.开始的表达式:"drugLicenseCompanyperson":[{"pk":"(.*?)"
2.修改后的表达式:"drugLicenseCompanyperson":\[\{"pk":"(.*?)"