Regex suche aus ausgelesener Text-Datei

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
coder007
User
Beiträge: 10
Registriert: Mittwoch 19. Oktober 2022, 18:14

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
Benutzeravatar
sparrow
User
Beiträge: 4244
Registriert: Freitag 17. April 2009, 10:28

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/
coder007
User
Beiträge: 10
Registriert: Mittwoch 19. Oktober 2022, 18:14

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
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Neun, das bedeutet das |-Zeichen nicht. Das bedeutet, dass links oder rechts als Alternative möglich ist.
Benutzeravatar
__blackjack__
User
Beiträge: 13268
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@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.
Please call it what it is: copyright infringement, not piracy. Piracy takes place in international waters, and involves one or more of theft, murder, rape and kidnapping. Making an unauthorized copy of a piece of software is not piracy, it is an infringement of a government-granted monopoly.
coder007
User
Beiträge: 10
Registriert: Mittwoch 19. Oktober 2022, 18:14

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
Viele Grüße

Coder007
Sirius3
User
Beiträge: 17844
Registriert: Sonntag 21. Oktober 2012, 17:20

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.
Antworten