为了账号安全,请及时绑定邮箱和手机立即绑定

python的正则表达式里,r后面的内容为什么还需要加转义符/ ?

python的正则表达式里,r后面的内容为什么还需要加转义符/ ?

撒科打诨 2019-02-15 16:49:26
题目描述需求是,把text里面的better替换成那个strong在sub方法的正则模式那里,我前面已经加了r,表示转义。为啥还要加一个\,写成r'\*(.*?)\* 呢?为啥不能直接写r'*(.*?)* 呢?这里的俩是干啥的?相关代码text = 'Beautiful is better than ugly.'re.sub(r'\*(.*?)\* ','',text)你期待的结果是什么?实际看到的错误信息又是什么?在sub方法的正则模式那里,我前面已经加了r,表示转义。为啥还要加一个\,写成r'\*(.*?)\* 呢?为啥不能直接写r'*(.*?)* 呢?我需要的是在* 和* 之间,并不需要*来表示数量啊,为什么r后面还要再加\*,来给*转义呢?
查看完整描述

1 回答

?
MMTTMM

TA贡献1869条经验 获得超4个赞

其实这里说了两层转义,一个是字符串赋值时转义,另一个是正则引擎转义

先说字符串前面的 rpython 默认会对字符串里面的转义字符进行转义,例如 \n 会直接换行,如果要打印 \n 就需要 \\n 这样定义,而字符串前面带上 r,就不会转义了

>>> print('\n')>>> print('\\n')
\n>>> print(r'\n')
\n

再说 **在字符串里面不属于转义字符,但是对于正则表达式来说是有特殊意义的。加上 \* 是为了让正则引擎把它认为是一个普通字符串。如果你的正则只是简单的 r'\*(.*?)\*',加不加 r 都结果都是一样的,python字符串赋值不会对它转义

>>> print(r'\*(.*?)\*')\*(.*?)\*>>> print('\*(.*?)\*')\*(.*?)\*


查看完整回答
反对 回复 2019-02-15
  • 1 回答
  • 0 关注
  • 734 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信