python字符串前的r
‘壹’ python的string前面加上‘r’,
在Python的string前面加上‘r’, 是为了告诉编译器这个string是个raw string,不要转意backslash '' 。 例如,\n 在raw string中,是两个字符,\和n, 而不会转意为换行符。由于正则表达式和 \ 会有冲突,因此,当一个字符串使用了正则表达式后,最好在前面加上'r'。
例:r"\n\n\n\n\n\n”
作用:声明后面的字符串是普通字符串
特殊字符串中含有: 转义字符 \n \t 什么什么的
用途:一般用在 正则表达式、文件绝对地址
1,正则表达式:
2、系统路径
这样就不用专门的去处理引号之中的特殊字符了
‘贰’ python字符串前面加r的问题,不会影响\d这个转义字符
刚开始学python,遇到一个字符串前面加r的问题
理论上,字符串前面加r,会消除转义字符对字符串的影响
例:
s=r'\tt'
print(s)
Output:
'\tt'
s='\tt'
print(s)
Output:
' t'
但是我发现对\d这个转义字符是没影响的
例如
import re
def re_method():
s ='kjiabc5ty'
print(re.search(r'喊运abc\d',s).group())
if __name__ =='__main__':
re_method()
依然可以匹配到abc5,并输出
我百思不得其解
后来在谷歌上搜到答案,大致意思说的\d不是有效的转义序列,所以python不会更改它,所以'\d' == r'\d'是对的。由于\\ 是 有效的转义序列,因此将其更改为\,因此您得到了该行为'\d' == '宴埋\\d' == r'\d'。所以,字符串有时会造成混乱。
下面我粘贴一段原话
There is a distinction you have to make between the python interpreter and the re mole.
In python, a backslash followed by a character can mean a special character if the string is not rawed. For instance, \n will mean a newline character, \r will mean a carriage return, \t will mean the tab character, \b represents a nondestructive backspace. By itself, \d in a python string does not mean anything special.
In regex however, there are a bunch of characters that would otherwise not always mean anything in python. But that's the catch, 'not always'. One of the things that can be misinterpreted is \b which in python is a backspace, in regex means a word boundary. What this implies is that if you pass on an unrawed \b to the regular expression part of a regex, this \b gets substituted by the backspace before it is passed to the regex function and it won't mean a thing there. So you have to absolutely pass the b with its backslash and to do that, you either escape the backslash, or raw the string.
Back to your question regarding \d, \d has no special meaning whatsoever in python, so it remains untouched. The same \d passed as a regular expression gets converted by the regex engine, which is a separate entity to the python interpreter.
翻译过来
您必须在python解释器和re模块之间进行区分。
在python中,如果未原始字符串,则反斜杠后跟一晌渗蚂个字符可以表示一个特殊字符。例如,\n表示换行符,\r表示回车,\t表示制表符,\b表示无损退格键。就其本身而言,\d在python字符串中并不表示任何特殊含义。
但是在regex中,有一堆字符在python中并不总是意味着任何东西。但这很重要,“并非总是如此”。可能被误解的一件事是\b在python中是退格,在正则表达式中是单词边界。这意味着如果您将未展开\b的正则表达式部分传递给正则表达式,则在将其传递给regex函数 之前, 它\b会被退格键所替代,并且 在 此处不会有任何意义。因此,您必须绝对传递b带有反斜杠的,然后要么转义反斜杠,要么原始字符串。
回到关于的问题\d,\d在python中没有任何特殊含义,因此保持不变。同样\d为正则表达式通过得到由正则表达式引擎,这是一个单独的实体来python解释转换。
总之,我还是理解不太清楚,但是总算知道了有这回事。
再次记录一下,
‘叁’ python中 r'', b'', u'', f'' 的含义
1、字符串前+u,如u"我是张三":
前缀u表示该字符串是unicode编码,在Python2中常被用在中文字符的字符串前,防止因为编码问题所导致的乱码,一般在文件开头标明编码方式采用utf8。在Python3中,所有的字符串默认都是unicode字符串。
2、旦者字符串前+r,如r" ":
表示一个正常的字符串,通常 被用作换行,而+r后,即表示 ,说白了就是去掉反斜杠的转义机制,在普通字符串中,反斜线是转义符,裤者代表一些特殊的内容,常用胡迟薯于特殊的字符,如换行符、正则表达式、文件路径。注意不能在原始字符串结尾输入反斜线,否则Python不知道这是一个字符还是换行符(字符串最后用表示换行),会报错。
3、字符串前+b,如abc=b'Zhangsan':
b' ':表示这是一个bytes对象,用在Python3中,它默认的str是unicode类,Python2的str本身就是bytes类。
b" ":表示后面字符串是bytes类型。
前缀b表示该字符串是bytes类型,常用在网络编程,服务器和浏览器只认bytes类型的数据,如send函数的参数和recv的函数的返回值都是bytes类型。
4、字符串前+f:
Python3.6的新加特性,前缀f用来格式化字符串,可以看出f前缀可以更方便地格式化字符串,比format()方法的可读性更高,且使用较方便,在加上f前缀后,支持在大括号内,运行Python表达式,也可以用fr前缀用来表示原生字符串。
‘肆’ python r代表什么意思
r/R,即raw的缩写,意思是未经加工的;自然状态的;未经处理的;未经分析的;原始的。
相关推荐:《Python教程》
在Python中r/R表示非转义的原始字符串。与普通字符相比,其他相对特殊的字符,其中可能包含转义字符,即那些,反斜杠加上对应字母,表示对应的特殊含义的,比如最常见的”n”表示换行,”t”表示Tab等。而如果是以r开头,那么说明后面的字符,都是普通的字符了,即如果是“n”那么表示一个反斜杠字符,一个字母n,而不是表示换行了。
字母前加r表示raw string,也叫原始字符串常量。一般用在一下两个方面:
1、正则表达式
用于处理正则表达式时,规避反斜杠的转义。
2、系统路径
如下面的路径,使用r就防止了t的转义。
‘伍’ python正则表达式re.findall(r"\b\w+\b", s)中的r是什么意思
Python中字符串前面加上
r
表示原生字符串,
与大多数编程语言相同,正则表达式里使用"\"作为转义字符,这就可能造成反斜杠困扰。假如你需要匹配文本中的字符"\",那么使用编程语言表示的正则表达式里将需要4个反斜杠"\\\\":前两个和后两个分别用于在编程语言里转义成反斜杠,转换成两个反斜杠后再在正则表达式里转义成一个反斜杠。Python里的原生字符串很好地解决了这个问题,这个例子中的正则表达式可以使用r"\\"表示。同样,匹配一个数字的"\\d"可以写成r"\d"。有了原生字符串,你再也不用担心是不是漏写了反斜杠,写出来的表达式也更直观。