Wie für eine beliebige Zeichenkette aus einer Liste von strings in reguläre Ausdrücke in python?
Können sagen, ich habe eine Liste von strings,
string_lst = ['fun', 'dum', 'sun', 'gum']
Ich möchte einen regulären Ausdruck, wo an einem Punkt, kann ich mit einem der strings ich habe in dieser Liste, innerhalb einer Gruppe, wie diese:
import re
template = re.compile(r".*(elem for elem in string_lst).*")
template.match("I love to have fun.")
Was wäre der richtige Weg, dies zu tun? Oder hätte man, um mehrere reguläre Ausdrücke und passen Sie alle einzeln nach der Schnur?
Verknüpfung der array-Elemente mit
Machen Sie die Pflege des strings gefunden wird, oder einfach nur, dass jeder von Ihnen zu finden sind?
|
als Klebstoff, wird form-string, wie fun|dum|sun|gum
die verwendet werden können in regex.re.search('|'.join(string_lst), input_string)
any(z in string_list for z in re.findall(r"['\w]+", 'This is just for fun'))
Machen Sie die Pflege des strings gefunden wird, oder einfach nur, dass jeder von Ihnen zu finden sind?
InformationsquelleAutor Josh Weinstein | 2015-10-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie nicht verwenden
match
wie es passen wird, aus starten.Verwendenfindall
statt.Ausgabe:
['fun']
mit
search
erhalten Sie nur das erste match.So verwendenfindall
statt.Verwenden auch
lookahead
wenn Sie überschneiden sich Spiele nicht starten an der gleichen Stelle.re.search
?So eine elegante Lösung!
In der Tat eine sehr gute Lösung. Danke
Aber das wird zurück
['fun']
wenn es ein Wort wie lustigOh schön. re.findall(r"(?=\b("+'|'.join(string_lst)+r")\b)",x) bei mir hat Es geklappt
InformationsquelleAutor vks
regex
- Modul hat Listen benannt (sets):Hier
words
ist nur ein name, die Sie verwenden können, was Sie wollen, statt..search()
Methoden verwendet, anstatt.*
vor/nach der genannten Liste.Emulieren namens-Listen mit stdlib -
re
Modul:re.escape()
wird verwendet, um zu entkommen regex-Metazeichen, wie.*?
innerhalb der einzelnen Wörter (entsprechend dem Worte buchstäblich).sorted()
emuliertregex
Verhalten und es bringt die längsten Worte, die ersten unter den alternativen, vergleichen:a|b|c|d
... Ansatz (lineare Suche)InformationsquelleAutor jfs
Außer für den regulären Ausdruck können Sie verwenden, Liste, Verständnis, hoffe es ist nicht off topic.
InformationsquelleAutor lord63. j
Sollten Sie make sicher zu entkommen, die Saiten richtig vor dem kombinieren in einem regex
InformationsquelleAutor John La Rooy