python的乙個原始字串的問題?

時間 2021-05-31 12:32:46

1樓:靈劍

以上答案說的都不太對,其實是因為raw並不是取消了所有的轉義,Python規定的raw字串非常奇怪,非常讓人崩潰,它是有轉義機制的,只是會轉義成原始的字元,我們來看一下官方文件原文:

Even in a raw literal, quotes can be escaped with a backslash, but the

backslash remains in the result; for example, r"\"" is a valid string

literal consisting of two characters: a backslash and a double quote; r"\"

is not a valid string literal (even a raw string cannot end in an odd number of

backslashes). Specifically, a raw literal cannot end in a single backslash

(since the backslash would escape the following quote character). Note also

that a single backslash followed by a newline is interpreted as those two

characters as part of the literal, not as a line continuation.

也就是說,raw字串仍然按照有轉義的方式解析,但所有應當轉義的字元都轉義成了反斜槓 + 被轉義字元,也就是說和轉義前保持不變,但是僅有乙個地方不一樣,就是引號的轉義:

r'\'' == '\\\''

這個引號仍然被轉義了,但是是轉義成反斜槓 + 引號。這是Python的raw字串乙個非常奇怪的特徵。

Python的反斜槓可以跟任意字元,對有效的轉義字元來說會變成轉義字元,對無效的轉義字元來說會保留反斜槓,因此對於大多數情況來說並沒有可以感知的區別,但是問題就在於如果字串以奇數個反斜槓結束,最後多出來的乙個反斜槓就會轉移到結束的引號,這就出問題了,所以Python的raw字串不能以奇數個反斜槓結束。所以在題主的題目中,這個以反斜槓結束的字串是用兩部分拼起來的:不以反斜槓結束的部分 + 反斜槓。

後面乙個字串不是raw string,所以用普通的轉義方式,寫兩個反斜槓。

另乙個特例是回車符,大部分人應該不知道Python可以在字串中轉義回車符:

'abc

\def'

# 'abcdef'

跑到raw字串當中就變成了

r'abc

\def'

# 'abc\\\ndef'

反斜槓保留,回車符也保留

2樓:劍神一笑

因為你不這樣,會報錯呀:print(r'c:\problem Files\foo''\')

File "", line 1

print(r'c:\problem Files\foo''\'SyntaxError: EOL while scanning string literal

哦,你那個居然是兩個單引號,我還以為是雙引號,但是即使只有乙個字串,最後結尾處的\也需要轉義

print(r'c:\problem Files\foo\')

File "", line 1

print(r'c:\problem Files\foo\'SyntaxError: EOL while scanning string literal

原因就是最後乙個\把'給轉義了,要不然直譯器還以為你要轉義單引號呢,畢竟你這個單引號是字串的起始和終止符啊

3樓:laiyonghao

Python 會把緊鄰的兩個字串字面量拼在一起。額,不僅 Python 會這樣,C++ 也是。見: 兩個 Python 的冷技巧

所以你其實定義了兩個字串字面量,而 r 只對第乙個起作用,所以後乙個要轉義。

4樓:

第一條反斜線轉義第二條反斜線,不然的話第二條反斜線會轉義掉最後的',使字串沒有終止然後報出SyntaxError。

這個字串實際上是兩個字串:'c:\problem Files\foo' 和 '\\'。我不知道為什麼你要分成兩個字串,不過反正是無關緊要的問題……

Python中如何複製乙個值或字串?

豌豆花下貓 update 實際上存在複製字串的方法。例如 join str 詳見這篇文章 join 方法的神奇用處與Intern機制的軟肋 以下是原回答 正想問同樣的問題,發現有人問了。不過看到這麼少人回答,還答非所問,就知道像我們這樣敏銳的人還是太少了。我先幫題主補充一下問題,這樣讀者才有正確思考...

python如何統計乙個字串中各字元的數量?

Shreck Ye 其實因為字符集是已知而且連續的,直接按字元編碼對映到乙個記憶體陣列裡面效率要比字典更高。不過既然是Python,變數都是用字典存的,效率似乎就無所謂了,更重要的是怎麼寫更簡單更快。這裡用字典也更方便簡單,參照高讚答案用collections.Counter一行就可以解決更好。 2...

如何通過只翻轉乙個字串的子串對該字串進行排序?

老版題是NP很多人已經給出參考文獻了。新版題是裸dp 設len是字串strls的長度,那麼定義dp len 1 2 表示直到長度x 0 x len 最後一位strls x 1 不翻轉 翻轉 0 1 所需的最小翻轉次數。 yaoyao 反轉兩個字元的子串不就是交換兩個字元的位置嗎?這是氣泡排序呀 喵的...