Hindi pinapansin (hindi pagpapagana) ang mga escape sequence sa Python na may mga hilaw na string

Negosyo

...',"..."Sa Python, kung i-prefix mo ang mga literal na string na ito sa isa sa mga sumusunod na character, ang halaga ay magiging isang string nang hindi pinapalawak ang escape sequence.

  • r
  • R

Kapaki-pakinabang kapag nakikitungo sa mga string na gumagamit ng maraming backslashes, tulad ng mga Windows path at regular na expression pattern.
Ang sumusunod na impormasyon ay ibinigay dito.

  • pagkakasunud-sunod ng pagtakas
  • Huwag pansinin (i-disable) ang mga escape sequence sa mga hilaw na string
  • I-convert ang normal na string sa raw string:repr()
  • Tandaan ang backslash sa dulo.

pagkakasunud-sunod ng pagtakas

Sa Python, ang mga character na hindi maaaring katawanin sa isang normal na string (tulad ng mga tab at bagong linya) ay inilalarawan gamit ang mga escape sequence na may mga backslashes, katulad ng wikang C. Ang isang halimbawa ng pagkakasunud-sunod ng pagtakas ay ipinapakita sa ibaba.

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

Huwag pansinin (i-disable) ang mga escape sequence sa mga hilaw na string

...',"..."Kung i-prefix mo ang ganoong string na literal sa isa sa mga sumusunod, ang value ay magiging isang string nang hindi pinapalawak ang escape sequence. Ang nasabing string ay tinatawag na raw string.

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

Walang espesyal na uri na tinatawag na raw string type, ito ay uri lamang ng string at katumbas ng isang normal na string na may backslash na kinakatawan bilang mga sumusunod
\\

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

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

Sa isang normal na string, ang isang escape sequence ay itinuturing na isang character, ngunit sa isang raw string, ang mga backslashes ay binibilang din bilang mga character. Ang haba ng string at bawat karakter ay ang mga sumusunod.

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 Path

Ang paggamit ng raw string ay kapaki-pakinabang kapag gusto mong kumatawan sa isang Windows path bilang isang string.

Ang mga landas sa Windows ay pinaghihiwalay ng mga backslashes, kaya kung gagamit ka ng isang normal na string, kailangan mong tumakas sa landas tulad ng sumusunod, ngunit kung gumagamit ka ng isang hilaw na string, maaari mo itong isulat bilang ay. Ang mga halaga ay katumbas.
\\

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

Tandaan na ang isang string na nagtatapos sa isang kakaibang bilang ng mga backslashes ay magreresulta sa isang error, tulad ng inilarawan sa ibaba. Sa kasong ito, kinakailangan na isulat ang string bilang isang normal na string, o pagdugtungin ito sa pamamagitan ng pagsulat lamang sa dulo ng string bilang isang normal na string.

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

I-convert ang mga normal na string sa mga hilaw na string na may repr()

Kung gusto mong i-convert ang isang normal na string sa isang hilaw na string na binabalewala (hindi pinapagana) ang mga escape sequence, maaari mong gamitin ang built-in na function na repr().

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

Ang ibinabalik ng repr() ay isang string na kumakatawan sa isang bagay na may parehong halaga tulad noong ipinasa ito sa eval(), na may mga leading at trailing na character.

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

Gamit ang mga hiwa, makakakuha tayo ng string na katumbas ng hilaw na string na may naka-attach na 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

Tandaan ang backslash sa dulo.

Dahil ang isang backslash ay tumakas sa quoting character kaagad pagkatapos nito, ang isang error ay magaganap kung mayroong isang kakaibang bilang ng mga backslashes sa dulo ng string. Ang pantay na bilang ng mga backslashes ay OK.

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

print(r'\\')
# \\

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