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.
| 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, … |
| 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“ |
| 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 |
| Ausdruck | Bedeutung | Beispiel | Findet |
|---|---|---|---|
^abc | steht am Anfang der Zeile | „abcde“ | abc |
xyz$ | steht am Ende der Zeile | „testxyz“ | xyz |
| 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“ | ||
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 reguläre Sprache ist eine Menge von Wörtern über ein Alphabet $A$, 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!