Python
Konzepte des skriptorientierten Programmierens
WI FOM 3.Semester - Endejan
1-3 Allgemein
- Interpreter Sprache
- Case-Sensitiv
- C-Python
Kontrollstrukturen
- Sequenzen (Einzelanweisungen)
- Verzweigungen (IF)
- Schleifen (For, While, …)
- Funktionen/Prozeduren
IO
Output
4 Kontrollstrukturen
4.1 Verzweigungen
- Bedingung mit logischen Operatoren: True, False, ==, !=, <, <=, >, >=, not, and, or
Conditional Expression
4.2 Schleifen
While
- Durch continue kann Schleifendurchlauf vorzeitig abgebrochen weerden, nächster fängt direkt an
- Und durch break wird Block wirklich vorzeit verlassen
- else unnötig, aber möglich
For
- hier gibt es wie beim while continue, break und else
4.3 Operatoren
Mathematische Operatoren
- +
- -
- *
- / –> erzeugt immer float
- ()
- ** Exponation
- // Quotient ganze Zahl ohne Rest
- % Remainder Rest
Binäre Operatoren
Zeichen |
Name |
Erklärung |
& |
Binary AND |
1 wenn beide Bits = 1, ansonsten 0 |
| |
Binary OR |
1 wenn mind. 1 Bit = 1, (0,0)-> 0, ansonsten 1 |
^ |
Binary XOR |
1 wenn genau 1 Bit = 1, (0,0)-> 0, (1,1) -> 0, ansonsten 1 |
x << n |
Bitverschiebung links |
Bitverschiebung um n Stellen nach links (*2) |
x >> n |
Bitverschiebung rechts |
Bitverschiebung um n Stellen nach rechts (:2) |
~x |
Bitweises Komplememnt |
1-> 0, 0-> 1 |
String Operatoren
Funktionieren auch bei Listen
s. sequienzelle Datentypen
4.4 Ausnahmebehandlungen: Exeptions
-
Syntax-Fehler / Syntax Error (Parser-Fehler)
• werden beim Parsen einer Zeile entdeckt u. verursachen einen Programmabbruch
• Parser weist auf fehlerhafte Zeile u. erste Stelle, an der der Fehler erkannt wurde
-
Laufzeitfehler / Ausnahmen / Exception
Fehler beim Versuch einen syntaktisch korrekten Befehl auszuführen
• können abgefangen (behandelt) werden
• nicht behandelte Fehler führen zu einem Programmabbruch
• es gibt unterschiedliche Ausnahme-Typen; Fehlermeldung liefert in der letztenZeile Informationen zur Art der konkreten Ausnahme (exception type)
try, except
5 Datentypen & Datenstrukturen
5.1 Datenmodell
Übersicht der eingebauten Datentypen

Python hat dynamische und starke Typisierung
Dynamische Typisierung
- sind nicht an einen bestimmten Datentyp gebunden
- müssen nicht deklariert werden
- Gegenstück statische Typisierung
Starke Typisierung
Python Konvertiert aber nicht automatisch, wenn die Variable nicht den gewünschten Datentyp hat
- Gegenstück schwache Typisierung

Objekt, Referenz, Instanz
In Python werden alle Daten über Objekte (Instanzen) bzw. über Beziehungen von Objekten repräsentiert
Datenobjekt:
besitzt eine Id (Identität), einen Typ und einen Wert
1. Identität:
• Objekt-Id ist eindeutig und unveränderlich
• Abfrage über id()
• Die Id entspricht in CPython der Speicheradresse
Abfrage:
Vergleich:
2. Typ:
• Objekt-Typ ist unveränderlich
• Abfrage über type()
• bestimmt die möglichen Werte und Operationen
Abfrage:
Vergleich:
3. Wert:
• Mögliche Werte abhängig vom Typ
Wertzuweisung
Vergleich:

Referenz:
a referenziert auf die Instanz
Instanz:
konkretes Datenobjekt im Speicher (mit eindeutiger Id)
Speicherverwaltung
- Python verwaltet die Referenzen auf Instanzen automatisch.
- Wenn es keine Referenz mehr auf eine Instanz gibt, kann der für die Instanz notwendige Speicherplatz vom Garbage Collector freigegeben werden.
- Explizite Freigabe über del
- Str-Objekt wird direkt nach der Ausgabe wieder freigegeben
Mutable & Immutable Datentypen
A) Mutable (veränderlich)
- Wert der Instanz kann sich zur Laufzeit ändern
• Manipulationen der Instanzwerte führen nicht zur Erzeugung einer neuen Instanz -> Referenz

• kann zur Seiteneffekten kommen

Mutable Datentypen:
- Listen list
- Mengen set
- Wörterbücher: dict
- Byte-Felder: bytearray
B) Immutable (unveränderlich)
- Wert der Instanz kann sich zur Laufzeit nicht ändern
• Manipulationen der Instanz führen zur Erzeugung einer neuen Instanz.

• Wenn mehrere Referenzen auf die gleiche Instanz zeigen treten keine direkten Seiteneffekte auf.

• Aber Vorsicht: im Objekt befindliche Referenzen auf veränderliche Objekte können geändert werden (wodurch Seiteneffekte entstehen können).

Immutable Datentypen:
- Numerische Objekte int, float, complex, bool
- Zeichenketten str
- Tupel tuple
- Eingefrorene Mengen frozenset
- Bytes bytes
5.2 Spezielle Datentypen
NoneType
- Schlüsselwort None
- Wahrheitswert ist False
- Abfrage mit is None
5.3 Numerische datentypen
- Int
- Bool (Wahrheitswerte, True=1, False=0)
- Float (Real)
- Complex - komplexe Zahlen (z.B. 2 + 8j)
Operatoren
siehe Kapitel Operatoren
Typumwandlung
- int()
- bool()
Wandelt man None oder leere Container um, bekommt man Flase zurück
- float()
- complex()
5.4 Sequenzielle Datentypen
- Verwaltung von gleichartigen oder *verschiedenen *Elementen
- Die Elemente innerhalb einer Sequenz weisen eine definierte Reihenfolge auf.
- Ein Zugriff auf einzelne Elemente einer Sequenz ist über eindeutige Indizes möglich
Datentyp |
Verwendungszweck |
mutable/immutable |
str |
Sequenz von Buchstaben (Zeichenketten) |
immutable |
list |
Sequenz beliebiger Instanzen |
mutable |
tuple |
Sequenz beliebiger Instanzen |
immutable |
bytes |
Sequenz von Bytes (Binärdaten) |
immutable |
bytearray |
Sequenz von Bytes (Binärdaten) |
mutable |
Operatoren für alle sequenzielle Datentypen
Von allen sequenziellen Datentypen bereitgestellt
Länge |
Kleinstes Element |
Größtes Element |
len(s) |
min(s) |
max(s) |
2 Slicing
s[i] |
s[i:j] |
s[i:j:k] |
Elementzugriff |
Slicing |
Slicing |
Element an Stelle i von s (Start bei 0) |
Ausschnitt (slice) von s von i bis j |
Ausschnitt von s von i bis j mit Schrittweite k |
Wenn i < 0: Start vom Ende (len(s)+i) |
Elemente mit Index k für die gilt: i <= k < j |
Elemente mit Index x = i + n*k, so dass 0 <= n < (j-i/k) |
|
Standardwert für i ist 0 |
Standardwert für k ist 1 |
3 Verkettung von Sequenzen
s + t |
s += t |
s * n |
s *= n |
Verkettung von s und t |
Verkettung von s und t und Zuweisung an s |
Verkettung von n flachen Kopien von s |
Verkettung von n flachen Kopien von s und Zuweisung an s (Werte < 0 für nwerden als 0 interpretiert) |
4 Auftreten von Elementen
a) in / not in
- x in s
True wenn x in s auftritt
b) count
- s.count(x)
Anzahl Vorkommnisse x in s
c) index
- s.index(x) / s.index(x,i,j)
Index des ersten Auftretens von x in s (ab Index i und vor j)
ValueError falls x nicht in s vorkommt!
Operatoren für veränderbare (mutable) Sequenzen
Die folgenden Operatoren werden von allen veränderbaren sequenziellen Datentypen
bereitgestellt:
1 Ersetzen von Elementen
- s[i] = x
Ersetzt Element an Stelle i mit x
- s[i:j] = t
Ersetzt s[i:j] durch Inhalt des iterierbaren Objektes t
- s[i:j:k] = t
Ersetzt Elemente von s[i:j:k] durch Objekte von t (# Elemente
müssen übereinstimmen)
2 Entfernen von Elementen
- del s[i]
Löscht Elemente an Stelle i
- s.pop([i])
Gibt Element an Stelle i bzw. letztes zurück u. löscht es aus s
- s.remove(x)
Löscht das erste Element in s für das s[i]==x
- s.clear()
Löscht alle Elemente von s – del s[:]
3 Hinzufügen von Elementen
- s.insert(i, x)
Fügt x an Stelle i bei s ein – s[i:i]=[x]
- s.append(x)
Fügt x an das Ende von von s an – s[len(s):len(s)]=[x]
- s.extend(t)
Erweitert s um die Elemente von t
4 Ändern der Element-Reihenfolge
- s.reverse()
Vertauscht die Elemente von s ‚in place‘
5 Kopieren von Sequenzen
- s.copy()
Erzeugt eine (flache) Kopie von s – s[:]
Operationen unveränderbare (immutable) Datentypen
List
- Datentyp list
• class list([iterable])
• Iterable: eine Sequenz, ein iterierbarer Container oder ein Iterator-Objekt
- Mutable Sequenzen
(typischerweise zur Ansammlung homogener Elemente)
- Erzeugung über
• eckige Klammern (leere Liste): [ ]
• Elemente in eckiger Klammer: [a], [a, b, c]
• List Comprehension: [x for x in iterable]
• Build-in-Funktion list()
- Einige Funktionen liefern Listen zurück, z. B. sorted()
Operationen
-
alle für mutable definierten Operationen
-
UND sort
-
sort(key=None, reverse=None)
Sortierung der Listenelemente
• key: Funktion, die zur Ermittlung des Schlüssels genutzt
werden soll (default None: direkte Nutzung der
Elemente); Bsp.: str.lower() für Zeichenketten
• reverse: Wahrheitswert; wenn True Sortierung in
umgekehrter Reihenfolge
• Methode gibt stets None zurück! Falls das Ergebnis als
Kopie benötigt wird, kann sorted() verwenden werden
List Comprehension
- f(x) for x in S if P(x)]
erzeugt eine Liste, basierend auf den Werten der Sequenz S
• gefiltert durch das Prädikat P und angewendet durch die Funktion f
Mit Prädiikat (Bedingung):
Für Mengen: {} anstatt []
Tupel
- Datentyp tuple
• class tuple([iterable])
• Iterable: eine Sequenz, ein iterierbarer
Container oder ein Iterator-Objekt
- Erzeugung über
• runde Klammern (leere Liste): ()
• angehängtes Komma (singleton tuple):
a, oder (a,)
• durch Kommata separierte Elemente:
a, b, c oder (a, b, c)
die Kommata machen das Tupel, nicht die ()!
• Build-in-Funktion tuple(), tuple(iterable)
- Tupel implementieren alle allgemeinen Sequenz-Operationen
- Tupel Packing / Tuple Unpacking
• Objekt in Tupel packen und aus Tupeln entpacken
Ranges
• Datentyp range
• class range(stop)
• class range(start, stop[, step])
• start, stop, step: Ganzzahlen (int)
• Default-Werte: start=0, step=1
• Range-Objekt ist bei ungültigen Werten leer ([] in Bsp.)
• Ranges implementieren alle allgemeinen SequenzOperationen mit Ausnahme der Verkettungen (a + b)
und Wiederholungen (3 * b)
Zeichenketten
- Datentyp str
- für Zeichenketten und einzelne Zeichen(Unicode Code Points)
- Immutable Datentyp
- Schreibweise mit Hochkommata
• einfaches: 'es sind "Einbettungen" erlaubt'
• doppeltes: "auch hier: 'Einbettung' erlaubt"
• dreifach: ' ' 'drei Mal ' ' ', " " "drei Mal" " "
- Erzeugung über Konstruktur: str()
• class str(object=‘‘)
• \n, \r, \t : New Line, Return, Tabulator
Operatoren
1) Trennen von Strings
- s.split(sep=none,maxsplit=-1)
Teilt s bei Vorkommen von sep in entsprechend viele
Elemente. Anzahl Separierungen kann durch maxsplit
begrenzt werden. Suchbeginn: String-Anfang. Ergebnis:
Liste von Strings.
- s.splitlines([keepends])
Teilt s bei Vorkommen von Zeilenvorschüben.
Zeilenvorschubzeichen bleiben enthalten, wenn
keepends=True.
2) Suchen von Teilstrings
- s.find(sub[,start[,end]])
Sucht den String sub im String s. Suchbeginn: StringAnfang; liefert Index des ersten Zeichens oder -1 zurück
- s.index(sub[,start[,end]]) S
ucht den String sub im String s. Suchbeginn: StringAnfang. Wirft Exception, wenn sub nicht in s vorkommt.
- s.count(sub[,start[,end]])
Zählt Anzahl Vorkommnisse von sub in s
3) Entfernen bestimmter Zeichen
- s.strip([chars])
Entfernt bestimmte Zeichen am Anfang und am Ende von s. Ohne Angabe von [chars] werden alle Whitespaces (Leerzeichen, Zeilenvorschub, Tabulator) am Anfang/Ende entfernt.
4) Ersetzen von Teilstrings
- s.replace(old,new[,count])
Ersetzt Vorkommen von old im String s durch new
- s.lower()
Ersetzt alle Großbuchstaben in s durch entsprechende Kleinbuchstaben
- s.upper()
Ersetzt alle Kleinbuchstaben in s durch entsprechende Großbuchstaben (aus 'ß' wird 'SS')
5) Ausrichten von Strings
- s.center(width[,fillchar])
Zentriert s im resultierenden String
6) Verketten mit String als Teilzeichen
- s.join(seq)
Verkettet die Elemente der Sequenz seq zu einem neuen String, wobei s als Trennzeichen zwischen den Elementen genutzt wird
7) Weitere Operatoren
- s.encode(encoding='utf-8',errors='strict')
Kodiert die Zeichen in s mit dem angegebenen
Kodierungsverfahren
möglich z. B.:
• 'utf-8'
• 'cp1252'
• 'ascii'
• 'iso-8859-15'
im Fehlerfall z. B. abbrechen (bei errors='strict'), Zeichen ignorieren ('ignore'), ersetzten durch ein Zeichen ('replace').
Bytes
- Datentyp bytes
- für Datenströme (Folgen von Bytes)
• bytes ist Folge von Bytes (Werte 0 bis 255)
(str ist Folge von Zeichen mit je n Bytes)
- Datentyp ist immutable (bytearray ist mutable)
- Schreibweise mit Hochkommata (vgl. string)
- Erzeugung vergleichbar mit Erzeugung von strings…
• … allerdings sind nur ASCII-Zeichen erlaubt
• … vor Literale muss ein 'b' geschrieben werden
• … Built-in-Funktion: bytes() (s. Bsp)
Bytearray
- Datentyp bytearray
- für Datenströme (Folge von Bytes)
- Datentyp ist mutable (im Gegensatz zu bytes )
- Erzeugung mit Built-in-Funktion bytearray
• … unter Übergabe einer Instanz von bytes
• … unter Übergabe eines Strings samt encoding
• keine 'literale' Syntax ('b' bei bytes) vorhanden
- Unterstützt die
• allgemeinen Operationen für bytes u. bytearrays
(s. Folgeseite) sowie
• die Operationen für mutable Datentypen (s. o.)
Encode() / Decode()
- String in Byte: str.encode()
- Byte in String: b.decode()
5.5 Mengen
- Mengen sind ungeordnete Ansammlungen von paarweise verschiedenen, hashbaren Elementen (jedes Element gibt es in der Menge nur einmal und die Elementdatentypen müssen immutable sein)
- Zwei Basistypen für Mengen:
• set für veränderliche Mengen (mutable)
• frozenset für unveränderliche Mengen (immutable)
- Erzeugung über die Funktionen
• set([iterable])
• frozenset([iterable])
- Nicht-leere Sets können auch über eine Kommaseparierte Liste von Elementen in '{}' erzeugt werden
- Vorteile bei Verwendung von frozenset:
Geschwindigkeit, Speichereffizienz, Verwendbarkeit
als Schlüssel in Dictionaries
Operationen

Methoden

5.6 Zuordnungen (Mappings)
Dictionarys (Wörterbücher)
- Mappings stellen Zuordnungen zwischen Objekten her
- Datentyp dict
- für die Speicherung von Schlüssel-Wert-Paaren
- Datentyp ist mutable
Schlüssel
• müssen im Dictionary eindeutig sein
• müssen Instanzen beliegiger unveränderlicher (immutable) Datentypen sein
Werte:
• Instanzen beliebiger Datentypen
Operationen:

Methoden:

6 Funktionen
Funktionen in Python geben immer einen Wert zurück, wenn nicht durh return definiert kommt None raus
6.1 Funktionsdefinition und -aufruf
Definition
Aufruf
Beispiel:
Argumente
Schlüsselwort-Argument
Übergabe des Arguments mit vorangestelltem
Identifizierer innerhalb des Funktionsaufrufs
und/oder als Wert in einem Dictionary mit
vorangestelltem **
Positions-Argument
Argument, das kein Schlüsselwort-Argument ist.
Übergabe positionsbezogener Argumente am Anfang
der Argumentliste und/oder als Elemente eines
iterierbaren Objekts mit vorangestelltem *
Parametertypen
Es gibt 5 Parametertypen
- positions- oder schlüsselwortbezogen
- Nach Angabe eines Schlüsselwortparameters keine positionsbezogene Angabe von Argumenten mehr möglich
- positionsbezogen mit beliebiger Anzahl
- Aufruf erzeugt ein Tupel mit den übergebenen Argumenten
- schlüsselwortbezogen mit beliebiger Anzahl
- Aufruf erzeugt ein Dictionary mit den übergebenen Argumenten
- rein positionsbezogen
- Python bietet keine Syntax zur Definition rein positionsbezogener Parameter
- Position i.d.R. durch Angabe des Parameternamens (Schlüssels) vertauschbar
- Allerdings erlauben einige eingebaute Funktionen nur eine positionsbezogene Übergabe von Parametern (z. B. abs(x))
- rein schlüsselwortbezogen
- Argumentübergabe ausschließlich über Schlüsselangabe
- Definition in der Parameterliste nach der Angabe der positionsbezogenen Parameter mit beliebiger Anzahl möglich oder – falls es keine solchen gibt – über die Angabe eines einzelnen * (ohne Parametername) vor den rein schlüsselwortbezogenen Parametern
Optionale Parameter
- Haben Standartwerte
- müssen am Ende der Schnittstelle stehen
Argumentlisten: Entpacken
- Iterierbare Objekte können zur Argumentübergabe
'entpackt' werden
• Tupel über einen *
• Dictionaries über zwei **
Seiteneffekte
- Bei der Übergabe von Argumenten von
mutable Datentypen kann es zu Seiteneffekten
kommen.
• Argumente werden bei der Übergabe
nicht kopiert
• in der Funktion wird also direkt auf dem
übergebenen Objekt gearbeitet
• Um Seiteneffekte auszuschließen sollten die
Argumente bei der Übergabe ggf. kopiert werden
Dokumentation: docstring
Kommentar wird zum Hilfesystem bei der Funktion hinzugefügt:

6.2 Namensräume
- Funktionen haben einen eigenen Namensraum
- Unterscheidung
• globaler Namensraum
• werden von gleichnamigen lokalen Variablen überdeckt
• lesender Zugriff aus Funktion heraus möglich
• schreibender Zugriff über Schlüsselwort global möglich
• lokaler Namensraum
Übergeordnete Namensräume
Nicht global und auch nicht lokal
- Innerhalb von Funktionen können weitere Funktionen definiert werden
- dadurch entstehen übergeordnete Namensräume
- Zugriff auf übergeordnete Variablen
• lesender Zugriff ohne weiteres möglich es wird ausgehend vom lokalen Namensraum nach oben hin gesucht, bis die Variable gefunden wurden (globale Variablen werden nicht berücksichtigt)
• schreibender Zugriff über Schlüsselwort nonlocal möglich
6.3 lambda
- lambda ist eine anonyme Inline-Funktion bestehend aus einem einfachen Ausdruck, der beim Funktionsaufruf ausgewertet wird
- Die Funktion nimmt Parameter entgegen, wertet den Ausdruck aus und liefern den entsprechenden Rückgabewert
- Definition über Schlüsselwort lambda
- Syntax: lambda Argumentliste : Ausdruck
- Die anonyme Funktion kann:
• über einen Verweis angesprochen oder
• direkt verwendet werden
Beispiel:
6.4 eingebaute Funktionen
Alle, die noch nicht in Dokument beschrieben wurden:
- reserved(seq)
Liefert Iterator, der seq rückwärts durchläuft
- all(iterable)
True, wenn alle Elemente in iterable True
-
any(iterable)
True, wenn mind. ein Element in iterable True
-
zip(iterables)
Erzeugt und liefert einen Iterator, der über die Elemente der einzelnen
iterables-Objekte iteriert (zuerst die ersten Elemente der Objekte, dann die
zweiten usw.).
- enumerate(iterable[,start])
Liefert Aufzählungsiterator für das übergebene (iterierbare) Objekt
- round(x[,n])
Liefert x auf n (bzw. 0) Stellen gerundet
- sum(iterable[, start])
Liefert die Summe der Elemente in iterable (plus start,
falls gegeben)
7 Datein
Lesen
- Datei öffnen: datObj = open(datName, "r")
- Daten zeilenweise lesen: for zeile in datObj: print(zeile)
Schreiben
- Datei öffnen: datObj = open(datName, "w")
- Daten schreiben: datObj.write(zeichenkette)
Schließen
- Datei schließen: datObj.close()
Öffnen Modi
"r" |
"w" |
"a" |
"b" |
"t" |
read: rein lesender Zugriff (default) |
write: rein schreibender Zugriff (evtl. vorhandene Datei mit gleichem Dateinamen wird gelöscht) |
append: Daten, die in die Datei geschrieben werden, werden am Ende der Datei angehängt |
Zusätzliche Angabe zur Bearbeitung einer Datei im Binärmodus ("rb", "r+b", "wb" etc.) |
Textmodus (default) |
Öffnen & Schließen Alternative
- mit Schlüsselwort with
- Explizietes Schließen der Datei damit nicht mehr notwendig
Methoden Dateiobjekt

8 Module der Standartbiblothek
8.1 Standartbibilothek - Übersicht
- Die Standardbibliothek wird in Form von Modulen bereitgestellt.
- Module können Definitionen (Funktion, Klassen, Konstanten / Variablen) und Anweisungen enthalten (s. u.).
- Zur Verwendung von Modulen müssen diese importiert werden (s. u.).
- Module werden auch zur Modularisierung eigener Programme genutzt. Programmaspekte können so besser gekapselt und auch in anderen Programmen wiederverwendet werden.
Import
- Mit dem Schlüsselwort from können Elemente – auch einzeln – importiert und anschließend ohne Angabe des Modulnamens, verwendet werden.
- Mit dem Schlüsselwort as können Objekte oder ganze Module unter einem anderen Namen eingebunden werden
8.2 Reguläre Ausdrücke (regEx)
Online Tester: https://regex101.com/
- Zum Suchen und Ersetzen von Zeichen oder Zeichenfolgen (Mustern) in Texten
- Suche von Übereinstimmungen (matching)
Einfaches Muster

1. Punkt .
Der Punkt stimmt überein mit jedem beliebigen Zeichen (Ausnahme: Zeilenumbruch).

2. Zirkumflex ^
Der Zirkumflex stimmt überein mit dem Anfang des Textes

3. Dollarzeichen $
Das Dollarzeichen stimmt überein mit dem Ende des Textes (bzw. einer Zeile).

4. Sternchen*
Das Sternchen matcht das null- bis mehrfache Auftreten des vorigen Ausdrucks.
- 0 oder mehr

5. Pluszeichen+
Das Pluszeichen matcht das ein- bis mehrfache Auftreten des vorigen Ausdrucks.
- 1 oder mehr

6. Fragezeichen ?
Das Fragezeichen matcht das null- oder einfache Auftreten des vorigen Ausdrucks.
- 0 oder 1

Gierige Quantifizierer

- Um die Qualifizierer *, +, ? nicht-gierig (engl. non-greedy, minimal) zu machen, muss ein (weiteres) ? hinter den Qualifizierer gesetzt werden.

7. Geschweifte Klammern {}
Die geschweiften Klammern geben an, dass der vorige Ausdruck in einer definierten Anzahl von Kopien auftreten muss.
- {m} - m Kopien

- {m, n} - m bis n Kopien

- {,n} - 0 bis n Kopien
- {m,} - m bis unendlich viele Kopien
*8. Backslash *
Der Rückstrich (umgekehrter Schrägstrich, engl. Backslash) wird als Escape-Zeichen (Fluchtsymbol) für spezielle Zeichen (z.B. * , +, ?) oder Zeichenfolgen (s.u.) genutzt (also zur Erzeugung von Escape-Sequenzen).

9. Eckige Klammern[]
Die eckigen Klammern werden genutzt, um eine Menge von passenden Zeichen anzugeben.
- Angabe einzelner Zeichen: [abc] matcht z.B. 'a', 'b', 'c'
- Angabe von Bereichen: Zeichen getrennt durch Bindestrich: [a-z] matcht z.B. alle Kleinbuchstaben von 'a' bis 'z‘
- Komplementbildung: Definition von Zeichen, die nicht gematcht werden: [^0-9] matcht z.B. alle Zeichen außer die Ziffern '0'bis '9'
- Spezialzeichen, wie * , +, (, ), verlieren innerhalb der eckigen Klammern ihre besondere Bedeutung: [+] matcht z.B. die Zeichen‘+' bis '‘
- Zeichenklassen (s.u.) sind innerhalb der Klammern gültig.


10. Senkrechter Strich |
Der senkrechte Strich (Verkettungszeichen, engl. [comp.] pipe) wird zur OderVerbindung beliebiger regulärer Ausdrücke genutzt.

11. Runde Klammern ()
Die runden Klammern werden zur Gruppierung genutzt. Der gesamte Ausdruck matcht alles, was innerhalb der Klammern gematcht wird. Auf den Inhalt der Gruppe (den match) kann später erneut zugriffen werden.
Spezielle Sequenzen

\zahl
\zahl matcht den Inhalt der Gruppe mit der angegebenen Zahl

RegEx in Python
Flags

Funktionen

Match
Search
Findalll