'...'
, "..."
Hvis du i Python sætter et af følgende tegn foran disse strenglitteraler, vil værdien blive en streng uden at udvide escape-sekvensen.
r
R
Nyttigt ved behandling af strenge, der bruger mange backslashes, f.eks. Windows-stier og mønstre for regulære udtryk.
Her findes følgende oplysninger.
- flugtsekvens
- Ignorere (deaktivere) escape-sekvenser i rå strenge
- Konverter normal streng til rå streng:
repr()
- Bemærk skråstreg i slutningen.
flugtsekvens
I Python beskrives tegn, der ikke kan repræsenteres i en normal streng (f.eks. tabulatorer og newlines), ved hjælp af escape-sekvenser med backslashes i lighed med C. Et eksempel på en escape-sekvens er vist nedenfor.
\t
\n
s = 'a\tb\nA\tB'
print(s)
# a b
# A B
Ignorere (deaktivere) escape-sekvenser i rå strenge
'...'
, "..."
Hvis du sætter en sådan stringliteral med et af følgende tegn foran, bliver værdien en string uden at udvide escape-sekvensen. En sådan streng kaldes en rå streng.
r
R
rs = r'a\tb\nA\tB'
print(rs)
# a\tb\nA\tB
Der er ingen speciel type kaldet raw string type, det er bare en strengte type og er lig med en normal streng med en backslash repræsenteret som følger\\
print(type(rs))
# <class 'str'>
print(rs == 'a\\tb\\nA\\tB')
# True
I en normal streng betragtes en escape-sekvens som ét tegn, men i en rå streng regnes backslashes også som tegn. Længden af strengen og hvert tegn er som følger.
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-sti
Det er nyttigt at bruge den rå streng, når du ønsker at repræsentere en Windows-sti som en streng.
Windows-stier er adskilt af backslashes, så hvis du bruger en normal streng, skal du undslippe stien som følger, men hvis du bruger en rå streng, kan du skrive den som den er. Værdierne er ækvivalente.\\
path = 'C:\\Windows\\system32\\cmd.exe'
rpath = r'C:\Windows\system32\cmd.exe'
print(path == rpath)
# True
Bemærk, at en streng, der slutter med et ulige antal backslashes, vil resultere i en fejl, som beskrevet nedenfor. I dette tilfælde er det nødvendigt at skrive strengen som en normal streng, eller sammenkæde den ved kun at skrive slutningen af strengen som en normal streng.
path2 = 'C:\\Windows\\system32\\'
# rpath2 = r'C:\Windows\system32\'
# SyntaxError: EOL while scanning string literal
rpath2 = r'C:\Windows\system32' + '\\'
print(path2 == rpath2)
# True
Konverter normale strenge til rå strenge med repr()
Hvis du ønsker at konvertere en normal streng til en rå streng uden at tage hensyn til (deaktivere) escape-sekvenser, kan du bruge den indbyggede funktion repr().
s_r = repr(s)
print(s_r)
# 'a\tb\nA\tB'
Det, repr() returnerer, er en streng, der repræsenterer et objekt, således at den har samme værdi, som da den blev overført til eval(), med ledende og afsluttende tegn.
print(list(s_r))
# ["'", 'a', '\\', 't', 'b', '\\', 'n', 'A', '\\', 't', 'B', "'"]
Ved at bruge skiver kan vi få en streng, der svarer til den rå streng med r tilknyttet.
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
Bemærk skråstreg i slutningen.
Da en skråstreg undgår det citationstegn, der følger umiddelbart efter den, opstår der en fejl, hvis der er et ulige antal skråstreger i slutningen af strengen. Et lige antal backslashes er OK.
# print(r'\')
# SyntaxError: EOL while scanning string literal
print(r'\\')
# \\
# print(r'\\\')
# SyntaxError: EOL while scanning string literal