Escape-Sequenzen in Python-Strings (C) 2016-2025 T.Birnthaler OSTC GmbH
==================================
Doku --> docs.python.org/3/reference/lexical_analysis.html#literals
docs.python.org/3/reference/lexical_analysis.html#string-and-bytes-literals
Das Zeichen "\" (Backslash) dient in Python innerhalb von Strings als
Escape-Zeichen ("Fluchtzeichen"), das zusammen mit dem DIREKT FOLGENDEN Zeichen
eine spezielle Bedeutung hat. Darüber werden z.B. Steuerzeichen (Strg-Z) und
Unicode-Zeichen über ihren ZEICHEN-CODE/CODE-POINT oder NAMEN angesprochen oder
ein Sonderzeichen " ' \ wird dadurch zu einem normalen Zeichen \" \' \\.
Folgende Escape-Sequenzen (ES) sind in Python definiert:
+--------------------+-----------------------------------------------------+
| ES Oct Hex Dez | Bedeutung |
+--------------------+-----------------------------------------------------+
| \\ \134 \x5C 92 | Backslash (doppelt!) [backslash] |
| \' \047 \x27 39 | Hochkomma (in '...' notwendig) [single quote] |
| \" \042 \x22 34 | Gänsefüßchen (in "..." notwendig) [double quote] |
+--------------------+-----------------------------------------------------+
| \a \007 \x07 7 | Klingel (BEL) [alert,bell] |
| \b \010 \x08 8 | Rückschritt (BS) [backspace] |
| \t \011 \x09 9 | Horizontaler Tabulator (HT) [horizontal tabulator] |
| \n \012 \x0A 10 | Zeilenumbruch (LF) [newline,linefeed] |
| \v \013 \x0B 11 | Vertikaler Tabulator (VT) [vertical tabulator] |
| \f \014 \x0C 12 | Seitenvorschub (FF) [form feed] |
| \r \015 \x0D 13 | Wagenrücklauf (CR) [carriage return] |
+--------------------+-----------------------------------------------------+
| \0 \000 \x00 0 | Null-Byte (NUL) [null] |
| \033 \x1B 27 | Escape (ESC) [escape] | \e geht nicht!
| \177 \x7F 127 | Delete (DEL) [delete] |
+--------------------+-----------------------------------------------------+
| \OOO | Z. mit Oktalcode "OOO" (000-377) [octal] |
| \xHH | Z. mit Hexadezimalcode "HH" (00-ff) [hexadezimal] |
| \uXXXX | Z. mit 16-Bit Unicode-Wert "XXXX" [unicode] |
| \UXXXXXXXX | Z. mit 32-Bit Unicode-Wert "XXXXXXXX" [Unicode] |
| \N{NAME} | Z. mit Unicode-Name "NAME" [Name] |
+--------------------+-----------------------------------------------------+
| \<NEWLINE> | Zeilenende wird ignoriert [line continuation] |
| \<SONST> | Bleibt stehen inkl. Backslash [FEHLER] |
+--------------------+-----------------------------------------------------+
HINWEISE:
* Innerhalb von RAW-STRINGS r"..." oder R"..." werden Escape-Sequenzen
nicht interpretiert, d.h. Backslash "\" zählt dort als normales Zeichen.
* Ein Backslash "\" direkt vor dem Zeilenende ("Line Continuation") verknüpft
die aktuelle Zeile mit der folgenden zu einer LOGISCHEN ZEILE und erlaubt die
Zerlegung von langen Zeilen in kurze Stücke. Die Einrückung der Folgezeile ist
dabei irrelevant und muss nicht den Einrückungsregeln von Python gehorchen.
erg = 1 + 2 + 3
Entspricht: erg = 1 + 2 + 3
* Zeichenketten werden in Python durch folgende Syntax definiert (quotiert):
+-----------------+-----+-------------------------------------------------+
| Syntax | | Bedeutung |
+-----------------+-----+-------------------------------------------------+
| "..." | E 1 | Alle Zeichen (außer " und Zeilenvorschub) |
| '...' | E 1 | Alle Zeichen (außer ' und Zeilenvorschub) |
| """...""" | E m | Alle Zeichen (inklusive " ' und Zeilenvorschub) |
| '''...''' | E m | Alle Zeichen (inklusive " ' und Zeilenvorschub) |
+-----------------+-----+-------------------------------------------------+
| b"..." B"..." | E 1 | Binär-String (PY2-Standard) |
| f"..." F"..." | E 1 | Format-String mit Platzhaltern der Form {...} |
| r"..." R"..." | - 1 | Raw-String (Escape-Sequenz nicht interpretiert) |
| u"..." U"..." | E 1 | Unicode-String (PY3-Standard) |
+-----------------+-----+-------------------------------------------------+
| ur"..." UR"..." | - 1 | Raw-String im Unicode-Format |
| ru"..." RU"..." | - 1 | Raw-String im Unicode-Format |
| fr"..." FR"..." | - 1 | Raw-Format-String |
| rf"..." RF"..." | - 1 | Raw-Format-String |
| br"..." BR"..." | - 1 | Raw-Binär-String |
| rb"..." RB"..." | - 1 | Raw-Binär-String |
+-----------------+-----+-------------------------------------------------+
E = Escape-Sequenz \X wird interpretiert (1 Zeichen)
- = Escape-Sequenz \X bleibt erhalten (2 Zeichen)
1 = Nur einzeiliger String möglich
m = Mehrzeiliger String sowie ' und " im String erlaubt
HINWEIS:
* String-Literale, die DIREKT aufeinander folgen, werden automatisch verkettet
(das Verkettungszeichen "+" dazwischen ist nicht notwendig):
"hallo" "welt" 'usw.' # --> 'halloweltusw.'
"hallo" + "welt" + 'usw.' # --> 'halloweltusw.'
"hallo" ' ' "welt" ' ' "usw." # --> 'hallo welt usw.'
Gilt auch dann, wenn die String-Literale auf mehrere Zeilen verteilt sind:
"hallo" # --> "halloweltusw."
"welt" #
"usw." #
Funktioniert allerdings NICHT mit Variablen, Funktionen, Konstanten, ... (TODO):
text # text = "hallo"
"WELT".lower() # Funktion auf String "WELT" anwenden
string.ascii_lowercase # Konstante
BEISPIELE:
print("Hallll\b\bo\t\\Welt") # 'Hallo \Welt'
print('Hallll\b\bo\t\\Welt') # 'Hallo \Welt'
print('''Hallll\b\bo\t\\Welt''') # 'Hallo \Welt'
print("""Hallll\b\bo\t\\Welt""") # 'Hallo \Welt'
print(r"Hallll\b\bo\t\\Welt") # 'Hallll\b\bo\t\\Welt' (Raw-String)
print(R"Hallll\b\bo\t\\Welt") # 'Hallll\b\bo\t\\Welt' (Raw-String)
print("Hallo \ # Zeilenfortsetzung im String
Welt") # (\n unterdrückt, Präfix 2. Zeile dabei)
print("Hallo " + \ # Zeilenfortsetzung im Code
"Welt") # (\n und Präfix 2. Zeile unterdrückt)
print("Hallo " "Welt") # 'Hallo Welt' (automatische Verkettung)
print("Hallo " + "Welt") # 'Hallo Welt' (explizite Verkettung)
Unicode-Zeichen per Code und per Name ansprechen:
print(
"\x41 \101 \u0041 \U00000041 \N{LATIN CAPITAL LETTER A}", # A A A A A
"\x61 \141 \u0061 \U00000061 \N{LATIN SMALL LETTER A}", # a a a a a
"\x5A \132 \u005A \U0000005A \N{LATIN CAPITAL LETTER Z}", # Z Z Z Z Z
"\x7A \172 \u007A \U0000007A \N{LATIN SMALL LETTER Z}", # z z z z z
"\u03A0 \U000003A0 \N{GREEK CAPITAL LETTER PI}", # Π Π Π
"\u03C0 \U000003C0 \N{GREEK SMALL LETTER PI}", # π π π
"\u00E4 \U000000E4 \N{LATIN SMALL LETTER A WITH DIAERESIS}", # ä ä ä
"\u00F6 \U000000F6 \N{LATIN SMALL LETTER O WITH DIAERESIS}", # ö ö ö
"\u00FC \U000000FC \N{LATIN SMALL LETTER U WITH DIAERESIS}", # ü ü ü
"\u00DF \U000000DF \N{LATIN SMALL LETTER SHARP S}", # ß ß ß
"\u00C4 \U000000C4 \N{LATIN CAPITAL LETTER A WITH DIAERESIS}", # Ä Ä Ä
"\u00D6 \U000000D6 \N{LATIN CAPITAL LETTER O WITH DIAERESIS}", # Ö Ö Ö
"\u00DC \U000000DC \N{LATIN CAPITAL LETTER U WITH DIAERESIS}", # Ü Ü Ü
"\u00D7 \U000000D7 \N{MULTIPLICATION SIGN}", # × × ×
"\u4e14 \U00004e14 \N{CJK UNIFIED IDEOGRAPH-4E14}", #
sep="\n",
)
HINWEIS: Bei Thonny gibt es leider Schwierigkeiten mit Unicode-Zeichen
ab "\U0010000", diese führen zum "Einfrieren" der GUI.
"\u4e14 \U00004e14 \N{CJK UNIFIED IDEOGRAPH-4E14}", # 且 且 且
"\U0001f970 \N{SMILING FACE WITH SMILING EYES AND THREE HEARTS}", # 🥰 🥰 🥰
Konvertierungs-Funktionen zwischen Zeichen und Zeichen-Code/Code-Point:
print( #
hex(ord('π')), # '03c0' (hexadecimal, ordinal)
hex(ord('\u03C0')), # '03c0'
ord('π'), # 960
ord('\u03C0'), # 960
chr(0x03C0), # 'π' (character)
chr(960), # 'π'
chr(int('03C0', 16)), # 'π'
chr(int('0x03C0', 0)), # 'π'
sep="\n", #
) #
import unicodedata # Modul importieren
print( #
unicodedata.name('\u03A0'), # 'GREEK CAPITAL LETTER PI'
unicodedata.name('\u03C0'), # 'GREEK SMALL LETTER PI'
sep="\n", #
) #