Hunsa (slökkva á) escape runum í Python með hráum strengjum

Viðskipti

...',"..."Í Python, ef þú settir eitt af eftirfarandi stöfum í forskeyti þessara strengjabókstafa, verður gildið að strengi án þess að stækka flóttaröðina.

  • r
  • R

Gagnlegt þegar verið er að takast á við strengi sem nota mikið af bakskástrikum, eins og Windows slóðum og venjulegri tjáningarmynstri.
Eftirfarandi upplýsingar eru veittar hér.

  • flótta röð
  • Hunsa (slökkva á) escape runum í hráum strengjum
  • Umbreyttu venjulegum streng í hráan streng:repr()
  • Taktu eftir skástrikinu í lokin.

flótta röð

Í Python er stöfum sem ekki er hægt að tákna í venjulegum streng (eins og flipa og nýlínur) lýst með því að nota escape-raðir með skástrikum, svipað og C tungumálið. Dæmi um flóttaröð er sýnt hér að neðan.

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

Hunsa (slökkva á) escape runum í hráum strengjum

...',"..."Ef þú setur slíkan streng bókstaflega í forskeyti við eitt af eftirfarandi, verður gildið að streng án þess að stækka flóttaröðina. Slíkur strengur er kallaður hrár strengur.

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

Það er engin sérstök tegund sem kallast hrá strengjagerð, hún er bara strengjagerð og er jöfn venjulegum strengi með skástrik sem táknað er sem hér segir
\\

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

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

Í venjulegum streng telst flóttaröð vera einn stafur, en í hráum streng eru bakskálar einnig taldar sem stafir. Lengd strengsins og hverrar stafs er sem hér segir.

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 slóð

Notkun hráa strengsins er gagnleg þegar þú vilt tákna Windows slóð sem streng.

Windows slóðir eru aðskildar með afturskák, þannig að ef þú notar venjulegan streng þarftu að sleppa slóðinni sem hér segir, en ef þú notar hráan streng geturðu skrifað hann eins og hann er. Gildin eru jafngild.
\\

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

Athugaðu að strengur sem endar með oddatölu af bakstökkum mun leiða til villu eins og lýst er hér að neðan. Í þessu tilviki er nauðsynlegt að skrifa strenginn sem venjulegan streng, eða sameina hann með því að skrifa aðeins endann á strengnum sem venjulegan 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

Umbreyttu venjulegum strengjum í hráa strengi með repr()

Ef þú vilt breyta venjulegum streng í hráan streng með því að hunsa (slökkva á) escape runum geturðu notað innbyggðu fallið repr().

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

Það sem repr() skilar er strengur sem táknar hlut þannig að hann hefur sama gildi og þegar hann var sendur í eval(), með fremstu og aftan stöfum.

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

Með því að nota sneiðar getum við fengið streng sem jafngildir hráa strengnum með r áföstum.

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

Taktu eftir skástrikinu í lokin.

Þar sem bakskástrik sleppur við tilvitnunarstafinn strax á eftir honum, mun villa koma upp ef það er oddafjöldi af bakstrikunum í lok strengsins. Jafn fjöldi bakkskákja er í lagi.

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

print(r'\\')
# \\

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