Seite 1 von 1
Daten extrahieren
Verfasst: Samstag 15. Januar 2022, 16:33
von THE_PYTHON_GUY
Hallo,
wie kann ich wenn ich z.B. den String x="Mein Name ist Peter, ciao" habe nur den teil zwischen ist und ciao speichern?
Ich weiß es macht bei diesem Beispiel kein Sinn.
Re: Daten extrahieren
Verfasst: Samstag 15. Januar 2022, 17:00
von /me
Je nachdem was du genau brauchst könnte das gut ein Fall für
Regular Expressions sein.
Es kann dir allerdings gerade als Anfänger durchaus passieren, dass du dich wie bei dem alten Spruch fühlst: "Ich hatte ein Problem. Dann verwendete ich reguläre Ausdrücke. Jetzt habe ich zwei Probleme."
Re: Daten extrahieren
Verfasst: Samstag 15. Januar 2022, 17:13
von rogerb
@THE_PYTHON_GUY,
so etwas kann man zum Beispiel über regex machen. Man muss sich zunächst eine allgemeingültige Regel überlegen.
Die Regel "...teil zwischen ist und ciao..." kann man nur als allgemeingültige Regel verwenden, wenn es wirklich immer ein "ist" und ein "ciao" gibt und man wirklich *alles* dazwischen haben will.
Mal angenommen es wäre so, dann würde das folgende funktionieren. Für einen anderen Fall muss man es halt anpassen.
Code: Alles auswählen
import re
test_str = "Mein Name ist Peter, ciao"
regex = r"ist(?P<name>.*)ciao"
matches = re.search(regex, test_str)
result = matches.groupdict()["name"]
print(result)
Re: Daten extrahieren
Verfasst: Samstag 15. Januar 2022, 21:06
von __blackjack__
@rogerb: Warum der Umweg über `groupdict()`? ``matches["name"]`` wäre kürzer und falls da intern nicht schon ein Wörterbuch vorgehalten wird, braucht das nicht extra erstellt zu werden.
@THE_PYTHON_GUY: Für einfache Fälle gibt es auch das externe `parse`-Modul, das sozusagen als Gegenstück zu `format()` funktioniert (und im Hintergrund einen regulären Ausdruck für die Suchvorlage bastelt und verwendet):
Code: Alles auswählen
In [126]: import parse
In [127]: text = "Mein Name ist Peter, ciao."
In [128]: match = parse.parse("Mein Name ist {name}, ciao.", text)
In [129]: match["name"]
Out[129]: 'Peter'
In [130]: match = parse.search("ist {name}, ciao", text)
In [131]: match["name"]
Out[131]: 'Peter'