Reguläre Sprachen

Reguläre Ausdrücke

Im Stoffgebiet Netzwerke habt ihr IP-Adressen kennengelernt.

Beispiel:

192.168.178.1

Um eine IP-Adresse darzustellen ist die Zeichenmenge
erforderlich, welche man als Alphabet auffassen der formalen Sprache „IP-Adresse“ auffassen kann. „IP-Adressen“ ist dabei eine Teilmenge der Menge , also der Menge aller Worte, die sich mit beschreiben lassen.

1. Möglichkeit: in Worten
Eine IP-Adresse besteht aus vier ein bis dreistelligen Zahlen im Bereich von 0 bis 255, die jeweils durch einen Punkt getrennt sind.

2. Möglichkeit: durch einen regulären Ausdruck

Reguläre Ausdrücke (RegEx) sind eine leistungsfähige Methode, um Texte zu durchsuchen, zu analysieren und bestimmte Muster zu finden. Sie sind in der Informatik eine Möglichkeit, einen Text nach bestimmten Ausdrücken zu durchsuchen.

Kurzreferenz für reguläre Ausdrücke

Grundlagen

Ausdruck	Bedeutung	Beispiel	Findet
a	genau den Buchstaben a	„Banane“	a
abc	die Zeichenfolge abc	„xabcx“	abc
.	ein beliebiges Zeichen (außer Zeilenumbruch)	„Katze“	Katze, Ktze, …

Zeichenklassen

Ausdruck	Bedeutung	Beispieltext	Treffer
\d	eine Ziffer (0–9)	„Haus 42“	4, 2
\w	ein Wortzeichen (Buchstabe, Zahl, _)	„Test_1“	T, e, s, t, _, 1
\s	ein Leerzeichen	„Hallo Welt“	(zwischen Hallo und Welt)
\b	Wortgrenze	„ein Haus“	vor „ein“, „Haus“

Wiederholungen

Ausdruck	Bedeutung	Beispiel	Findet
a*	0 oder mehr a	„aaah“	aaa
a+	1 oder mehr a	„baaah“	aaa
a?	0 oder 1 a	„baah“	a
a{3}	genau 3 a	„aaaah“	aaa
a{2,4}	2 bis 4 a	„aaaaah“	aaaa

Positionen

Ausdruck	Bedeutung	Beispiel	Findet
^abc	steht am Anfang der Zeile	„abcde“	abc
xyz$	steht am Ende der Zeile	„testxyz“	xyz

Gruppierung und Alternativen

Ausdruck	Bedeutung	Beispieltext	Treffer
(abc)	Gruppe – fasst Zeichen zu einer Einheit zusammen	abcabc mit (abc)	„abc“ (erste Gruppe)
A \| B	Alternative – findet A oder B	Katze Hund Maus mit Katze \| Hund	„Katze“, „Hund“
(ab){2}	Wiederholung einer Gruppe – zweimal „ab“ hintereinander	ababc	„abab“
(?:abc)	Nicht-speichernde Gruppe – gruppiert ohne Nummerierung	(?:abc){2} auf abcabc	„abcabc“
(\d+)\s+\1	Rückverweis – sucht zwei gleiche Zahlen hintereinander	42 42	„42 42“

Pythonprogramme zum Test regulärer Ausdrücke

In den folgenden Pythonprogrammen kannst du die Beispiele aus den Referenztabellen testen.

#Grundlagen #Der reguläre Ausdruck muss in einem sogenannten Raw-String r"" stehen. import re text = "Banane" print(re.findall(r"a", text)) text = "xabca" print(re.findall(r"abc", text)) text = "Katze" print(re.findall(r".", text))
#Zeichenklassen import re text = "Baby" print(re.findall(r"[abc]", text)) text = "Haus" print(re.findall(r"[A-Z]", text)) text = "Test123" print(re.findall(r"[a-zA-Z]", text)) text = "A1B" print(re.findall(r"[^0-9]", text))
#Wiederholungen import re text = "aaah" print(re.findall(r"a*", text)) text = "baaah" print(re.findall(r"a+", text)) text = "baah" print(re.findall(r"a?", text)) text = "aaah" print(re.findall(r"a{3}", text)) text = "aaaaah" print(re.findall(r"a{2,4}", text))
#Positionen import re text = "abcde" print(re.findall(r"^abc", text)) text = "testxyz" print(re.findall(r"xyz$", text))
#Wiederholungen import re text = "abcabc" print(re.findall(r"(abc)", text)) text = "Katze Hund Maus" print(re.findall(r"Katze|Hund", text)) text = "ababc" print(re.findall(r"(ab){2}", text)) text = "abcabc" print(re.findall(r"(?:abc){2}", text)) text = "42 42" print(re.findall(r"(\d+)\s+\1", text))

Aufgabe 1

Entwirf einen regulären Ausdruck, der drei ein- bis dreistellige Zahlen durch einen Punkt trennt! Wende den Ausdruck im nachfolgenden Programmauf den Text an!

# Aufgabe 1 import re text = """ 192.168.178.1 0.0.0.0 270.98.8.99 192_168_4236_7 3.3.3,3 127.0.0.0 177.0.0 1921681781 """ print(re.findall(r"", text))

Aufgabe 2
Verbessere deinen Ausdruck von Aufgabe 1 so, dass der IP-Adressen erkennt!

# Aufgabe 2 import re text = """ 192.168.178.1 0.0.0.0 270.98.8.99 192_168_4236_7 3.3.3,3 127.0.0.0 177.0.0 1921681781 """ print(re.findall(r"", text))

Aufgabe 3
Finde reguläre Ausdrücke für

eine deutsche Postleitzahl

eine einfache E-Mail-Adresse

Wörter mit Großbuchstaben am Anfang

Reguläre Sprachen

Eine reguläre Sprache ist eine Menge von Wörtern, die man durch einfache, sich wiederholende Muster (Reguläre Ausdrücke) beschreiben kann.

Reguläre Sprachen haben in der Informatik eine besondere Bedeutung, z.B. beim Compilerbau. In Klasse 12 werden wir den Begriff fachlich exakt definieren.

Aufgabe 4

Arbeite die Flaci-Seite zu regulären Ausdrücken durch!