'...'
, "..."
Om du i Python sätter ett av följande tecken före dessa stränglitteraler blir värdet en sträng utan att expandera escape-sekvensen.
r
R
Användbart när du hanterar strängar som använder många backslashes, t.ex. Windows-stigar och reguljära uttrycksmönster.
Här finns följande information.
- Flyktsekvens.
- Ignorera (inaktivera) escape-sekvenser i råa strängar
- Konvertera normal sträng till rå sträng:
repr()
- Observera backslash i slutet.
Flyktsekvens.
I Python beskrivs tecken som inte kan representeras i en normal sträng (t.ex. tabulatorer och nya rader) med hjälp av escape-sekvenser med backslashes, på samma sätt som i C. Ett exempel på en escape-sekvens visas nedan.
\t
\n
s = 'a\tb\nA\tB'
print(s)
# a b
# A B
Ignorera (inaktivera) escape-sekvenser i råa strängar
'...'
, "..."
Om du sätter en sådan stränglitteral med något av följande före, blir värdet en sträng utan att expandera escape-sekvensen. En sådan sträng kallas för en rå sträng.
r
R
rs = r'a\tb\nA\tB'
print(rs)
# a\tb\nA\tB
Det finns ingen speciell typ som kallas raw string type, det är bara en strängtyp och är lika med en normal sträng med ett backslash som representeras på följande sätt\\
print(type(rs))
# <class 'str'>
print(rs == 'a\\tb\\nA\\tB')
# True
I en normal sträng räknas en escape-sekvens som ett tecken, men i en rå sträng räknas även backslashes som tecken. Längden på strängen och varje tecken är följande.
print(len(s))
# 7
print(list(s))
# ['a', '\t', 'b', '\n', 'A', '\t', 'B']
print(len(rs))
# 10
print(list(rs))
# ['a', '\\', 't', 'b', '\\', 'n', 'A', '\\', 't', 'B']
Windows-sökväg
Att använda den råa strängen är användbart när du vill representera en Windows-sökväg som en sträng.
Windows-sökvägar separeras med backslashes, så om du använder en normal sträng måste du undslippa sökvägen på följande sätt, men om du använder en rå sträng kan du skriva den som den är. Värdena är likvärdiga.\\
path = 'C:\\Windows\\system32\\cmd.exe'
rpath = r'C:\Windows\system32\cmd.exe'
print(path == rpath)
# True
Observera att en sträng som slutar med ett udda antal backslashes resulterar i ett fel som beskrivs nedan. I det här fallet är det nödvändigt att skriva strängen som en normal sträng, eller sammanfoga den genom att skriva endast slutet av strängen som en normal sträng.
path2 = 'C:\\Windows\\system32\\'
# rpath2 = r'C:\Windows\system32\'
# SyntaxError: EOL while scanning string literal
rpath2 = r'C:\Windows\system32' + '\\'
print(path2 == rpath2)
# True
Konvertera normala strängar till råa strängar med repr()
Om du vill konvertera en normal sträng till en rå sträng genom att ignorera (inaktivera) escape-sekvenser kan du använda den inbyggda funktionen repr().
s_r = repr(s)
print(s_r)
# 'a\tb\nA\tB'
Vad repr() returnerar är en sträng som representerar ett objekt så att den har samma värde som när den överlämnades till eval(), med inledande och avslutande tecken.
print(list(s_r))
# ["'", 'a', '\\', 't', 'b', '\\', 'n', 'A', '\\', 't', 'B', "'"]
Genom att använda skivor kan vi få en sträng som motsvarar den råa strängen med r bifogat.
s_r2 = repr(s)[1:-1]
print(s_r2)
# a\tb\nA\tB
print(s_r2 == rs)
# True
print(r'\t' == repr('\t')[1:-1])
# True
Observera backslash i slutet.
Eftersom ett backslash undviker citationstecknet omedelbart efter det, uppstår ett fel om det finns ett udda antal backslashes i slutet av strängen. Ett jämnt antal backslashes är OK.
# print(r'\')
# SyntaxError: EOL while scanning string literal
print(r'\\')
# \\
# print(r'\\\')
# SyntaxError: EOL while scanning string literal