Mit dem re-modul mehrere Elemente abfragen

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: 363
Registriert: Mittwoch 14. Dezember 2016, 20:59

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

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):
        ....
Benutzeravatar
__blackjack__
User
Beiträge: 14052
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Beziehungsweise `all()` wenn „ALLES was in der liste steht zutrifft“. Und um die konkrete Frage von egon11 auch noch zu beantworten: Ja. 🙂
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Sirius3
User
Beiträge: 18272
Registriert: Sonntag 21. Oktober 2012, 17:20

Wann es darum geht, dass alles in beliebiger Reihenfolge in einer Zeile vorkommen darf, dann wird das aber mit regulären Ausdrücken eklig.
Benutzeravatar
__blackjack__
User
Beiträge: 14052
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Sirius3: Ich weiss. Aber man bekommt es hin. 😜
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
egon11
User
Beiträge: 363
Registriert: Mittwoch 14. Dezember 2016, 20:59

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

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

Weißt du, wie du strings in Kleinschreibung wandelst? Wenn ja, dann musst du das hier nur kombinieren.
egon11
User
Beiträge: 363
Registriert: Mittwoch 14. Dezember 2016, 20:59

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.
Benutzeravatar
__blackjack__
User
Beiträge: 14052
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@egon11:

Code: Alles auswählen

In [257]: "haLLo".lower() == "Hallo".lower()                                    
Out[257]: True
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
egon11
User
Beiträge: 363
Registriert: Mittwoch 14. Dezember 2016, 20:59

Vielen Dank für den Hinweis. Ich mache alles auf `.lower()` dann funktioniert's.
Antworten