Seite 1 von 1

Mit dem re-modul mehrere Elemente abfragen

Verfasst: Freitag 10. Juli 2020, 09:30
von egon11
Hallo, ich stehe vor einen kleinen Problem. ich habe eine Liste mit string Elementen (Anzahl ist unbekannt).

Ich möchte eine Datei einlesen und mittels `for` schleife Zeile für Zeile auswerten.

Soweit kein Problem, aber ich habe eine Liste mit strings, wo die Anzahl der Elemente unbekannt ist, und die möchte ich somit Zeile für Zeile der Datei überprüfen ob ALLES was in der liste steht zutrifft. Wenn ja speichert es in eine andere Liste.

Mir geht es darum, ob man es mit dem re-Modul hinbekommt?

Re: Mit dem re-modul mehrere Elemente abfragen

Verfasst: Freitag 10. Juli 2020, 09:37
von __deets__
Du drückst dich sehr unklar aus. Geht es darum in jeder Zeile zu prüfen, ob ein Element deiner Stringliste darin vorkommt? Dann kannst du das einfach explizit prüfen. Kompakter in der Schreibweise mit “any” als Prädikat.

Code: Alles auswählen

for line in file:
    if any(word in line for word in list_of_strings):
        ....

Re: Mit dem re-modul mehrere Elemente abfragen

Verfasst: Freitag 10. Juli 2020, 09:41
von __blackjack__
Beziehungsweise `all()` wenn „ALLES was in der liste steht zutrifft“. Und um die konkrete Frage von egon11 auch noch zu beantworten: Ja. 🙂

Re: Mit dem re-modul mehrere Elemente abfragen

Verfasst: Freitag 10. Juli 2020, 09:47
von Sirius3
Wann es darum geht, dass alles in beliebiger Reihenfolge in einer Zeile vorkommen darf, dann wird das aber mit regulären Ausdrücken eklig.

Re: Mit dem re-modul mehrere Elemente abfragen

Verfasst: Freitag 10. Juli 2020, 09:51
von __blackjack__
@Sirius3: Ich weiss. Aber man bekommt es hin. 😜

Re: Mit dem re-modul mehrere Elemente abfragen

Verfasst: Freitag 10. Juli 2020, 10:03
von egon11
__deets__ hat geschrieben: Freitag 10. Juli 2020, 09:37

Code: Alles auswählen

for line in file:
    if any(word in line for word in list_of_strings):
        ....
Genau das habe ich gesucht. 'any' habe ich in python noch nie gehöhrt, vielen dank und wieder etwas gelernt.

Re: Mit dem re-modul mehrere Elemente abfragen

Verfasst: Freitag 10. Juli 2020, 10:14
von egon11
Nachfrage, kann man dabei auch Groß und Kleinschreibweise ignorieren?
z.B. befindet sich das Wort "Hello" im Text, aber in der Liste wirde "hello" angegeben?

Re: Mit dem re-modul mehrere Elemente abfragen

Verfasst: Freitag 10. Juli 2020, 10:16
von __deets__
Weißt du, wie du strings in Kleinschreibung wandelst? Wenn ja, dann musst du das hier nur kombinieren.

Re: Mit dem re-modul mehrere Elemente abfragen

Verfasst: Freitag 10. Juli 2020, 10:30
von egon11
Naja so richtig komme ich da nicht weiter, denn wenn nämlich in der Liste "haLLo" steht und im Text "Hallo", also es sollte schon die Groß- und Kleinschreibung ganz ignorieren.

Re: Mit dem re-modul mehrere Elemente abfragen

Verfasst: Freitag 10. Juli 2020, 10:32
von __blackjack__
@egon11:

Code: Alles auswählen

In [257]: "haLLo".lower() == "Hallo".lower()                                    
Out[257]: True

Re: Mit dem re-modul mehrere Elemente abfragen

Verfasst: Samstag 11. Juli 2020, 13:11
von egon11
Vielen Dank für den Hinweis. Ich mache alles auf `.lower()` dann funktioniert's.