Wort suchen was exakt auf das gesuchte passt

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
egon11
User
Beiträge: 365
Registriert: Mittwoch 14. Dezember 2016, 20:59

Hallo, ich möchte ein Wort suchen, was auch direkt ins Suchmuster passt.
Wenn ich "Auto" suche möchte ich nicht "Automaten" als Treffer bekommen.

Ich habe folgendes mal getestet:

Code: Alles auswählen

import re


my_liste = ["Auto", "Autobus", "Automaten"]

for i in my_liste:
    if re.search(r"Auto", i):
        print("Auto: " + i)
    elif re.search(r"Automaten", i):
        print("Automaten: " + 1)

Im "re" - Modul habe ich dazu nichts brauchbares gefunden -- oder überlesen--
Vielleicht könnt ihr mir eine kleine Hilfe geben wie man so etwas löst.

Gruß
Benutzeravatar
snafu
User
Beiträge: 6923
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Du suchst re.match(), nicht re.search().

Noch einfacher wäre ein direkter Vergleich:

Code: Alles auswählen

for word in words:
    if word == "Auto":
        # ...
Oder mit einer Menge:

Code: Alles auswählen

words = set(["Auto", "Autobus", "Automaten"])
print("Auto" in words)
Zuletzt geändert von snafu am Dienstag 3. Februar 2026, 21:13, insgesamt 1-mal geändert.
Benutzeravatar
__blackjack__
User
Beiträge: 14299
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@egon11: Warum denn dann `re` und nicht einfach `==`? Falls das Wort *in* einem Listenelement vorkommen können soll, dann ist das Beispiel schlecht gewählt, denn dafür reicht es ja nur ein Beispiel ohne die Liste zu zeigen und es sollte dann auch mehr als nur das Wort in dem zu durchsuchenden Text stehen. In dem Fall suchst Du wahrscheinlich „word boundary“, also r"\b" im regulären Ausdruck.

Und bitte nicht `my_liste` oder gar `i` für etwas das keine ganze Zahl ist.

Code: Alles auswählen

worte = ["Auto", "Autobus", "Automaten"]
for wort in worte:
    if wort in {"Auto", "Automaten"}:
        print(f"{wort}: {wort}")
„Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.“ — Brian W. Kernighan
Benutzeravatar
snafu
User
Beiträge: 6923
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Außerdem sei der allseits bekannte Tipp erwähnt, einmal das Python Tutorial (Original | Übersetzung) durchzuarbeiten. Das hilft wirklich, wenn man ganz neu dabei ist.
egon11
User
Beiträge: 365
Registriert: Mittwoch 14. Dezember 2016, 20:59

Noch einfacher wäre ein direkter Vergleich:

Code: Alles auswählen

for word in words:
    if word == "Auto":
        # ...
Ich habe mich falsch ausgedrückt bzw mir ist ein Fehler bei der Beschreibung aufgefallen.
Also nochmal, ich lese eine Datei ein und speichere jede Zeile in eine Liste.
Danach iteriere ich die Liste und es sollen diese im #1 genannten Wörter gesucht werden.
Also in welcher Zeile kommt das Wort "Auto", das Wort "Autobus" und in welcher das Wort "Automat" vor.
Daher das ich die Sätze nicht kenne, kann ich den Vergleich mit "==" nicht bringen.
re.match sucht nur am Anfang.
Eine Variante wäre, jede Zeile nochmal bei jeden Leerzeichen zu splitten, um es so zu suchen (was ich hinbekommen hab).
Aber geht es auch einfacher?
Benutzeravatar
__blackjack__
User
Beiträge: 14299
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@egon11: Was heisst einfacher? Und ist das an Leerzeichen aufteilen nicht _zu_ einfach, denn so wird man bei "Am Ende dieses Satzes steht ein Auto." das Auto nicht finden, weil "Auto" ≠ "Auto."

Deswegen erwähnte ich ja „word boundary“ bei regulären Ausdrücken. Allerdings würde das dann immer noch nicht helfen bei Sätzen wie "Bei diesem Glücksspielanbieter kann man Wetten auf Auto- und Pferderennen setzen." Da würde dann Auto erkannt, obwohl das eigentlich für "Autorennen" steht. Ähnlich falls beispielsweise "Automat" mit einem Bindestrich über zwei Zeilen getrennt wurde als "… Auto-", "mat …". Hier würde fälschlich "Auto" erkannt, "Automat" aber nicht.

Natürliche Sprache zu verarbeiten ist nicht so einfach.
„Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.“ — Brian W. Kernighan
Antworten