猿问

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

题目描述

需求是,把text里面的better替换成那个strong
在sub方法的正则模式那里,我前面已经加了r,表示转义。
为啥还要加一个\,写成r'\*(.*?)\* 呢?
为啥不能直接写r'*(.*?)* 呢?
这里的俩是干啥的?

相关代码

text = 'Beautiful is better than ugly.'
re.sub(r'\*(.*?)\* ','',text)

你期待的结果是什么?实际看到的错误信息又是什么?

在sub方法的正则模式那里,我前面已经加了r,表示转义。
为啥还要加一个\,写成r'\*(.*?)\* 呢?
为啥不能直接写r'*(.*?)* 呢?

我需要的是在* 和* 之间,并不需要*来表示数量啊,为什么r后面还要再加\*,来给*转义呢?


撒科打诨
浏览 761回答 1
1回答

MMTTMM

其实这里说了两层转义,一个是字符串赋值时转义,另一个是正则引擎转义先说字符串前面的 r, python 默认会对字符串里面的转义字符进行转义,例如 \n 会直接换行,如果要打印 \n 就需要 \\n 这样定义,而字符串前面带上 r,就不会转义了>>> print('\n')>>> print('\\n') \n>>> print(r'\n') \n再说 *,*在字符串里面不属于转义字符,但是对于正则表达式来说是有特殊意义的。加上 \* 是为了让正则引擎把它认为是一个普通字符串。如果你的正则只是简单的 r'\*(.*?)\*',加不加 r 都结果都是一样的,python字符串赋值不会对它转义>>> print(r'\*(.*?)\*')\*(.*?)\*>>> print('\*(.*?)\*')\*(.*?)\*
随时随地看视频慕课网APP

相关分类

Python
我要回答