Seite 1 von 1

Regex suche aus ausgelesener Text-Datei

Verfasst: Mittwoch 19. Oktober 2022, 18:35
von coder007
Hallo zusammen,
ich habe eine Text-Datei ausgelesen und möchte in dieser Text-Datei einen Satz suchen und dieser soll vervollständigt ausgegeben werden.
Der Satz lautet: "das _ mir _ _ _ vor" der Satz ist im Text ohne Lücken zu finden.
Bisher habe ich das geschrieben
import re

with open('[Pfad der datei]') as text_file:
text = text_file.read()


pattern = ' das|mir|||vor'
test_string = text
result = re.match(pattern, test_string)


if result:
print(re.findall(pattern, test_string))
else:
print("Search unsuccessful.")
ausgegeben werden viele Leerzeichen und ab und zu ein 'das'.

Lg coder007

Re: Regex suche aus ausgelesener Text-Datei

Verfasst: Mittwoch 19. Oktober 2022, 21:25
von sparrow
Wenn du Code in diesem Forum postest, dann musst du ihn zwischen code-Tags setzen.
Die erscheinen automatisch, wenn du den </>-Button im vollständigen Editor drückst.
Nur dann bleiben die Einrückungen erhalten - und die sind bei Python nun einmal fundamental.

Zu deinem pattern: Wie kommst du darauf, dass das so funktionieren könnte? Was hat denn die Pipe "|" darin für eine Bedeutung?
Es gibt verschiedene Online-Tools mit denen man regex super ausprobieren kann. Ich empfehle https://regex101.com/

Re: Regex suche aus ausgelesener Text-Datei

Verfasst: Mittwoch 19. Oktober 2022, 22:00
von coder007
sparrow hat geschrieben: Mittwoch 19. Oktober 2022, 21:25 Wenn du Code in diesem Forum postest, dann musst du ihn zwischen code-Tags setzen.
Die erscheinen automatisch, wenn du den </>-Button im vollständigen Editor drückst.
Nur dann bleiben die Einrückungen erhalten - und die sind bei Python nun einmal fundamental.

Zu deinem pattern: Wie kommst du darauf, dass das so funktionieren könnte? Was hat denn die Pipe "|" darin für eine Bedeutung?
Es gibt verschiedene Online-Tools mit denen man regex super ausprobieren kann. Ich empfehle https://regex101.com/
Es funktioniert ja auch nicht, deswegen bin ich in diesem Forum. Und die Pipe "|" bedeutet das in diesem Zwischenraum ein belibige-r/-s Satz, Wort, Zeichen in diesem Zwischenraum befindet.

Lg coder007

Re: Regex suche aus ausgelesener Text-Datei

Verfasst: Mittwoch 19. Oktober 2022, 22:19
von __deets__
Neun, das bedeutet das |-Zeichen nicht. Das bedeutet, dass links oder rechts als Alternative möglich ist.

Re: Regex suche aus ausgelesener Text-Datei

Verfasst: Mittwoch 19. Oktober 2022, 23:25
von __blackjack__
@coder007: Die Bedeutung von "|" in regulären Ausdrücken steht übrigens in der Dokumentation vom `re`-Modul, wo auch ein How-To zu regulären ausdrücken verlinkt ist.

Beim öffnen von Textdateien sollte man immer explizit die Kodierung angeben in der die Datei gespeichert wurde.

`match()` schränkt mehr ein als Du möchtest, und es ist auch nicht so wirklich sinnvoll erst zu suchen um festzustellen ob das Muster enthalten ist, um dann noch mal zu suchen um an die Ergebnisse zu kommen. Such gleich alle Vorkommen und prüfe dann, ob die Liste die dabei heraus kommt, leer ist oder nicht. Das ist weniger Arbeit für den Rechner.

Es ist nicht wirklich sinnvoll den gleichen Wert an zwei verschiedene Namen zu binden. Das verwirrt eher. Binde den Text gleich an den Namen den Du letztendlich haben willst.

Re: Regex suche aus ausgelesener Text-Datei

Verfasst: Montag 24. Oktober 2022, 10:55
von coder007
Hallo ich habe endlich das richtige Pattern gefunden. Aber ich möchte jetzt das die Rechtschreibung ignoriert wird ich weiß das das mit dem folgenden Befehl geht aber ich weiß nicht wie ich den verwende.

Code: Alles auswählen

import re
re.IGNORECASE

Re: Regex suche aus ausgelesener Text-Datei

Verfasst: Montag 24. Oktober 2022, 11:08
von Sirius3
Rechtschreibung kann man damit nicht irgnorieren, das wäre eine zu anspruchsvolle Aufgabe. Mit "(das|dass|daß)" könnte man noch Deine fehlenden s an "dass" abdecken. Fehlende Satzzeichen, wie Punkt und Komma könnte man mit ,? abdecken, wobei dann der Sinn des Satzes schon ziemlich entstellt werden kann. Dass nach einem Punkt groß weiter geschrieben wird, bei Dir aber alles kein ist, kann man durch ignorieren der Groß-Kleinschreibung beheben, indem man re.IGNORECASE als `flags`-Keyword-Argument mit übergibt.