python 字符串前面加r表示什么?

Python08

python 字符串前面加r表示什么?,第1张

您好,你的问题,我之前好像也遇到过,以下是我原来的解决思路和方法,希望能帮助到你,若有错误,还望见谅!Python中,u表示unicode string,表示使用unicode进行编码,没有u表示byte string,类型是str,在没有声明编码方式时,默认ASCI编码。如果要指定编码方式,可在文件顶部加入类似如下代码:

# -*- coding: utf-8 -*-

utf-8是一种支持中文的编码格式。

字母前加r表示raw string,也叫原始字符串常量。一般用在一下两个方面:

1、正则表达式

用于处理正则表达式时,规避反斜杠的转义

2、系统路径

如下面的路径,使用r就防止了\t的转义

扩展资料:

python在执行代码是,所有的计算都会由内存进行,此时的编码格式是unicode,因为世界上存在着多种编码方式,同一个二进制数字可以被解释成不同的符号。为了统一编码格式,便于计算,就出现了unicode。非常感谢您的耐心观看,如有帮助请采纳,祝生活愉快!谢谢!

刚开始学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 module.

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中是作为序列存在的,序列中的元素具有从左到右的顺序,并根据他们的相对位置进行读取和储存。严格意义来说,字符串是一系列单个字符组成的序列,其他类型的序列还包括列表和元组。在一串字符两侧加上双引号或者单引号即可创建字符串。

注意 :如果字符串中需要出现双引号或者单引号,则有两种方法。

1)使用转义字符(\)进行转义。

2)将双引号和单引号配合使用,即若向想打印单引号,可以使用双引号表示字符串,在字符串中只用一个单引号。反之亦然。

在一个字符串前面加上r;则会自动为字符串中的反斜杠\转义,使其只代表一个反斜杠\。但是注意,原始字符串最后不能有反斜杠\,否则会发生语法错误。如果非要在原始字符串最后加上,则可以写为\。

运行结果为:

有时我们需要创建一个跨行的字符串,则可以使用三引号来创建。

运行结果为

1)可以通过len()函数得到序列的长度。

运行结果为:

2)可以通过索引操作得到序列的各个元素值。python中序列的索引是从0开始依次向后推移。

运行结果为:

3)python还支持反向索引,是从最后一个向前推移的。-1是指序列中的最后一个元素值,-len(str)是指该序列的第一个元素值。

运行结果为:

4)序列还支持一种 分片(slice) 的操作,这是一种能够一步提取整个分片的方法。

分片可以看作是字符串中一部提取出其中一部分的方法。其一般形式为:X[I:J],表示从X序列中取出第I个元素到不包含第J个元素的部分,结果为返回一个新的对象。

运行结果为:

在一个分片(slice)中,左边界默认为0。同时应注意负偏移量在分片中的边界,也应为左侧数字比右侧数字小。拷贝全部字符串的用法为str[:]。

运行结果为:

5)作为一个序列,字符串还支持用“+”来合并字符串。

运行结果为:

6) 不可变性 ,python中字符串具有不可变性,在创建一个字符串之后不可以通过对其某一位置进行赋值而改变该字符串,但可以通过创建一个新的字符串并以同一个变量名命名。

运行结果为:

7)除了一般的序列操作,字符串还有一些其特有的操作方法。

如find()方法,可以用于查找一个子字符串,可以返回该子字符串的索引值。但如果存在多个符合的子字符串,只会返回第一个索引值。如果不存在该子字符串,则返回-1。replace(S1,S2)方法会将字符串中的S1替换为S2。

运行结果如下:

关于字符串,python还有许多内置函数,可以通过调用dir()函数来查看。