Wenn ich versuche, reguläre Ausdrücke zu verwenden, um Zeichenfolgen in anderen Zeichenfolgen zu finden, funktioniert es nicht wie erwartet. Hier ein Beispiel:Suchzeichenfolgen mit regulärem Ausdruck in Python
import re
message = 'I really like beer, but my favourite beer is German beer.'
keywords = ['beer', 'german beer', 'german']
regex = re.compile("|".join(keywords))
regex.findall(message.lower())
Ergebnis:
['beer', 'beer', 'german beer']
Aber das erwartete Ergebnis wäre:
['beer', 'beer', 'german beer', 'german']
Eine andere Möglichkeit, das zu tun sein könnte:
results = []
for k in keywords:
regex = re.compile(k)
for r in regex.findall(message.lower()):
results.append(r)
['beer', 'beer', 'beer', 'german beer', 'german']
Es funktioniert wie ich will, aber ich denke es ist n Das ist der beste Weg, das zu tun. Kann mir jemand helfen?
Der Fragesteller nicht nur testen wollen, ob ein bestimmter Teilkette einen Teil eines Strings ist, aber er will alle Vorkommen eines bestimmten Teilkette. In diesem Fall ist die Verwendung von 're.findall()' der beste Weg, dies zu erreichen. Das Vermeiden von regulären Ausdrücken würde diese Lösung mühsamer als notwendig machen. – pemistahl
Danke euch für eure Antworten. Jetzt weiß ich, dass ich eine falsche Funktion verwende (findall), also was empfehlen Sie für Übereinstimmungen, einschließlich Überlappungen? –
@ Adrián: Brauchst du die Macht von regulären Ausdrücken oder willst du nur feste Strings finden? –