Põgenemisjooniste ignoreerimine (keelamine) Pythonis koos toorsõnadega

Äri

'...', "..."Pythonis, kui te kasutate nende string literaalide ees ühte järgmistest märkidest, muutub väärtus stringiks ilma põgenemisjada laiendamata.

  • r
  • R

Kasulik, kui tegemist on stringidega, mis kasutavad palju kaldkriipsu, näiteks Windowsi teekondades ja regulaaravaldiste mustrites.
Siin on esitatud järgmine teave.

  • põgenemisjärjekord
  • Ignoreerida (keelata) põgenemiskombinatsioone toorsõnades
  • Tavalise stringi teisendamine toorstringiks:repr()
  • Pange tähele tagurpidi kaldkriipsu lõpus.

põgenemisjärjekord

Pythonis kirjeldatakse sümboleid, mida ei saa esitada tavalises stringis (näiteks tabulaatorid ja read), kasutades sarnaselt C-keelele tagurpidi joonealuseid põgenemiskombinatsioone. Allpool on näidatud näide põgenemisjärjekorra kohta.

  • \t
  • \n
s = 'a\tb\nA\tB'
print(s)
# a b
# A B

Ignoreerida (keelata) põgenemiskombinatsioone toorsõnades

'...', "..."Kui lisate sellisele string literaalile ühe järgmistest, muutub väärtus stringiks ilma põgenemisjada laiendamata. Sellist stringi nimetatakse töötlemata stringiks.

  • r
  • R
rs = r'a\tb\nA\tB'
print(rs)
# a\tb\nA\tB

Ei ole olemas spetsiaalset tüüpi nimega raw string type, see on lihtsalt string type ja on võrdne tavalise stringiga koos backslash'iga, mis on esitatud järgmiselt
\\

print(type(rs))
# <class 'str'>

print(rs == 'a\\tb\\nA\\tB')
# True

Tavalises stringis loetakse põgenemiskombinatsiooni üheks märgiks, kuid toorstringis loetakse ka kaldkriipsud märgiks. Stringi ja iga tähemärgi pikkus on järgmine.

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']

Windowsi tee

Toore stringi kasutamine on kasulik, kui soovite esitada Windowsi tee stringina.

Windowsi teed on eraldatud kaldkriipsudega, nii et kui kasutate tavalist stringi, peate te põgenema tee järgmiselt, kuid kui kasutate toorest stringi, võite selle kirjutada sellisena, nagu see on. Väärtused on samaväärsed.
\\

path = 'C:\\Windows\\system32\\cmd.exe'
rpath = r'C:\Windows\system32\cmd.exe'
print(path == rpath)
# True

Pange tähele, et string, mis lõpeb paaritu arvu kaldkriipsudega, põhjustab vea, nagu on kirjeldatud allpool. Sellisel juhul tuleb string kirjutada tavalise stringina või liita see, kirjutades ainult stringi lõppu tavalise stringina.

path2 = 'C:\\Windows\\system32\\'
# rpath2 = r'C:\Windows\system32\'
# SyntaxError: EOL while scanning string literal
rpath2 = r'C:\Windows\system32' + '\\'
print(path2 == rpath2)
# True

Tavaliste stringide teisendamine töötlemata stringideks repr() abil

Kui soovite teisendada tavalise stringi tooreks stringiks, ignoreerides (keelates) põgenemiskombinatsioone, võite kasutada sisseehitatud funktsiooni repr().

s_r = repr(s)
print(s_r)
# 'a\tb\nA\tB'

repr() tagastab objekti kujutava stringi, mis on sama väärtusega kui see, mis edastati eval()-ile, koos ees- ja tagantjärele jäävate märkidega.

print(list(s_r))
# ["'", 'a', '\\', 't', 'b', '\\', 'n', 'A', '\\', 't', 'B', "'"]

Kasutades viilud, saame stringi, mis on samaväärne toorstringiga, millele on lisatud r.

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

Pange tähele tagurpidi kaldkriipsu lõpus.

Kuna tagurpidi joonealune kaldkriips katkestab vahetult sellele järgneva jutumärgi, tekib viga, kui stringi lõpus on paaritu arv tagurpidi kaldkriime. Paaris arv kaldkriipsusid on OK.

# print(r'\')
# SyntaxError: EOL while scanning string literal

print(r'\\')
# \\

# print(r'\\\')
# SyntaxError: EOL while scanning string literal