Python有多种方法来写字符串字面。我们也可以将这些字符串类型中的任何一种转换为raw。你可以用单引号或双引号写一个字符串。
Python 原始字符串
Python 原始字符串是一个以r或R 为前缀的普通字符串。
要在Python中创建一个raw字符串,在字符串字面前加上'r'或'R'。原始字符串将反斜杠 (\)作为字面字符处理。为了理解原始字符串的含义,请看下面的字符串,它的序列是"\n " 和 "\t"。
str = "Well\thello beautiful\nsaid by joker"
print(str)
输出
Well hello beautiful
said by joker
这里,str是一个正则字符串,所以它把"\n " 和 "\t " 当作转义字符。
让我们用它来创建一个原始字符串,看看它的结果如何:
raw_str = r"Well\thello beautiful\nsaid by joker"
print(raw_str)
输出
Well\thello beautiful\nsaid by joker
在这种情况下,原始字符串不会将"\n "和"\t "作为转义字符。
使用原始字符串的地方
你可以在你不需要该字符串的处理版本时使用原始字符串。例如,如果你的字符串包含任何无效的转义字符,如\x或\k,它将抛出一个SyntaxError。
str = "Well\xhello beautiful"
print(str)
输出
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 4-5: truncated \xXX escape
你可以看到我们得到了一个SyntaxError,因为Python不知道如何解码'\x',因为它没有任何特殊含义。
如果我们使用一个原始的字符串,这个错误就可以避免了:
str = r"Well\xhello beautiful"
print(str)
输出
Well\xhello beautiful
Python 中无效的原始字符串
如果你认为所有的原始字符串都是有效的,那么你就错了。有可能存在无效的原始字符串。例如,一个只包含一个反斜杠的原始字符串是无效的。
invalidRawA = r"\"
print(invalidRawC)
输出
invalidRawA = r"\"
^
SyntaxError: EOL while scanning string literal
或这些种类的原始字符串是无效的:
invalidRawB = r"abc\"
invalidRawC = r"abc\\\"
结论
Python的原始字符串将**反斜杠(\ )作为一个字面字符操作。例如,如果我们想打印一个里面有*"\t "的字符串,它就会添加空格。但是如果我们把它变成一个原始字符串,它将只把"\t "作为一个普通字符打印出来。
在这个例子中,我们已经看到了如何创建一个原始字符串,何时使用它,以及什么是无效的原始字符串。本教程就到此为止。