题目描述需求是,把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个赞
其实这里说了两层转义,一个是字符串赋值时转义,另一个是正则引擎转义
先说字符串前面的 r
, python
默认会对字符串里面的转义字符进行转义,例如 \n
会直接换行,如果要打印 \n
就需要 \\n
这样定义,而字符串前面带上 r
,就不会转义了
>>> print('\n')>>> print('\\n') \n>>> print(r'\n') \n
再说 *
,*
在字符串里面不属于转义字符,但是对于正则表达式来说是有特殊意义的。加上 \*
是为了让正则引擎把它认为是一个普通字符串。如果你的正则只是简单的 r'\*(.*?)\*'
,加不加 r 都结果都是一样的,python
字符串赋值不会对它转义
>>> print(r'\*(.*?)\*')\*(.*?)\*>>> print('\*(.*?)\*')\*(.*?)\*
添加回答
举报
0/150
提交
取消