Pakosekvenssien huomiotta jättäminen (poistaminen käytöstä) Pythonissa raaoilla merkkijonoilla

liiketoiminta

'...', "..."Pythonissa, jos asetat näiden merkkijonojen eteen jonkin seuraavista merkeistä, arvosta tulee merkkijono ilman pakosarjan laajentamista.

  • r
  • R

Hyödyllinen, kun käsitellään merkkijonoja, joissa käytetään paljon vinoviivoja, kuten Windowsin polkuja ja säännöllisiä lausekkeita.
Seuraavat tiedot annetaan tässä.

  • pakosekvenssi
  • Jätä huomiotta (poista käytöstä) pakosekvenssit raakamerkinnöissä
  • Muunna normaali merkkijono raa'aksi merkkijonoksi:repr()
  • Huomaa backslash lopussa.

pakosekvenssi

Pythonissa merkit, joita ei voida esittää tavallisessa merkkijonossa (kuten välilehdet ja uudet viivat), kuvataan C-kielen tapaan pakosekvensseillä, joissa on vinoviivoja. Alla on esimerkki pakosekvenssistä.

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

Jätä huomiotta (poista käytöstä) pakosekvenssit raakamerkinnöissä

'...', "..."Jos asetat tällaisen merkkijonoliiterin eteen jonkin seuraavista, arvosta tulee merkkijono ilman pakosarjan laajentamista. Tällaista merkkijonoa kutsutaan raa'aksi merkkijonoksi.

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

Ei ole olemassa mitään erityistä tyyppiä nimeltä raw string type, se on vain merkkijonotyyppi ja vastaa normaalia merkkijonoa, jossa on backslash, joka esitetään seuraavasti
\\

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

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

Tavallisessa merkkijonossa pakosekvenssi katsotaan yhdeksi merkiksi, mutta raa'assa merkkijonossa myös vinoviivat lasketaan merkiksi. Merkkijonon ja kunkin merkin pituus on seuraava.

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-polku

Raaka merkkijonon käyttäminen on hyödyllistä, kun haluat esittää Windows-polun merkkijonona.

Windowsin polut erotetaan toisistaan vinoviivoilla, joten jos käytät normaalia merkkijonoa, sinun on vältettävä polku seuraavasti, mutta jos käytät raakaa merkkijonoa, voit kirjoittaa sen sellaisenaan. Arvot vastaavat toisiaan.
\\

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

Huomaa, että merkkijono, joka päättyy parittomaan määrään vinoviivoja, johtaa virheeseen, kuten alla on kuvattu. Tässä tapauksessa merkkijono on kirjoitettava normaalina merkkijonona tai ketjutettava kirjoittamalla vain merkkijonon loppu normaalina merkkijonona.

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

Muunna tavalliset merkkijonot raaoiksi merkkijonoiksi repr():lla.

Jos haluat muuntaa normaalin merkkijonon raa'aksi merkkijonoksi jättämällä pakosekvenssit huomiotta (poistamalla ne käytöstä), voit käyttää sisäänrakennettua funktiota repr().

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

repr() palauttaa merkkijonon, joka edustaa objektia siten, että sillä on sama arvo kuin eval()-operaattoriin syötettäessä, etu- ja loppumerkit mukaan lukien.

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

Käyttämällä viipaleita saamme merkkijonon, joka vastaa raakaa merkkijonoa, johon on liitetty 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

Huomaa backslash lopussa.

Koska backslash-merkki poistaa välittömästi sen jälkeen olevan lainausmerkin, virhe tapahtuu, jos merkkijonon lopussa on pariton määrä backslash-merkkejä. Parillinen määrä vastaviivoja on OK.

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

print(r'\\')
# \\

# print(r'\\\')
# SyntaxError: EOL while scanning string literal
Copied title and URL