Skip to content

Rohe Zeichenketten in Python

Python

In Python werden Strings mit dem Präfix r oder R wie r’…‘ und r“…“ als Raw-Strings bezeichnet und behandeln Backslashes als Literalzeichen. Unformatierte Buchstaben sind nützlich, wenn Buchstaben verarbeitet werden, sterben viele umgekehrte Schrägstriche verwenden, z. B. Windows-Pfade und reguläre Ausdrucksmuster.

Dieser Artikel hat folgenden Inhalt.

  • Fluchtsequenzen
  • Raw-Strings behandeln Backslashes als Literalzeichen
  • Normale Strings mit repr() in Raw-Strings umwandeln
  • Raw-Strings dürfen nicht mit einer ungeraden Anzahl von Backslashes enden

Fluchtsequenzen

In Python Werden Zeichen, die nicht in String dargestellt werden can (wie Tabulatoren, Zeilenvorschübe usw.), durch eine Escape-Sequenz mit normalem Backslash (wie einem t oder n), ähnlich wie in der Sprache C.

s = 'atbnAtB'
print(s)
# a b
# A B

Raw-Strings behandeln Backslashes als Literalzeichen

Buchstaben mit dem Präfix r oder R, wie z. B. r’…‘ und r“…“, werden als unformatierte Buchstaben bezeichnet und behandeln Backslashes als Literalzeichen. In Rohzeichenfolgen werden Escape-Sequenzen nicht besonders behandelt.

rs = r'atbnAtB'
print(rs)
# atbnAtB

Es gibt keinen speziellen Typ für Rohstrings; Es ist nur eine Zeichenfolge, die einer normalen Zeichenfolge mit Backslashes entspricht, sterben durch \ dargestellt Werden.

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

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

In Einer Normalen Zeichenfolge WIRD Eine Escape-Sequenz Als Ein Zeichen Betrachtet, Aber In Einer Rohzeichenfolge Werden Auch Backslashes Als Zeichen Zählt.

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

Die Verwendung der Rohzeichenfolge ist nützlich, wenn Sie einen Windows-Pfad als Zeichenfolge darstellen.

Windows-Pfade werden durch Backslashes getrennt. Wenn Sie also einen normalen String verwenden, müssen Sie jeden mit Escapezeichen wie \ versehen, aber Sie können ihn so schreiben, wie er ist, mit einem rohen String.

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

Beachten SIE, dass. Eine Zeichenfolge, die mit Einer ungeraden Anzahl von Backslashes endet, einen Fehler auslöst, wie unten beschrieben. In diesem Fall & Sie ihn in einen normalen String schreiben oder nur den abschließenden Backslash als normalen String schreiben und ihn verketten.

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

Normale Strings mit repr() in Raw-Strings umwandeln

Verwenden Sie die eingebaute Funktion repr(), um normale Strings in Raw-Strings umzuwandeln.

s_r = repr(s)
print(s_r)
# 'atbnAtB'

Der von repr() zurückgegebene String hat ‚am Anfang und am Ende.

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

Mit Slices can SIE die Zeichenfolge erhalten, sterben der Rohzeichenfolge entspricht.

s_r2 = repr(s)[1:-1]
print(s_r2)
# atbnAtB

print(s_r2 == rs)
# True

print(r't' == repr('t')[1:-1])
# True

Raw-Strings dürfen nicht mit einer ungeraden Anzahl von Backslashes enden

Da Backslashes dem nachgestellten ‚ oder „entgehen, tritt ein Fehler auf, wenn am Ende der Zeichenfolge eine ungerade Anzahl von Backslashes steht.

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

print(r'\')
# \

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