Gibt es in Python einen besseren Weg, um Zeichenketten in reguläre Ausdrücke parametrisieren als es manuell so zu machen:
test = 'flobalob'
names = ['a', 'b', 'c']
for name in names:
regexp = "%s" % (name)
print regexp, re.search(regexp, test)
Dieses Beispiel von noddy versucht, jeden Namen der Reihe nach zu finden. Ich weiß, dass es dafür bessere Möglichkeiten gibt, aber es ist ein einfaches Beispiel, um den Punkt zu illustrieren.
Die Antwort scheint zu lauten: Nein, es gibt keine echte Alternative. Der beste Weg, reguläre Ausdrücke in Python zu parametrisieren, ist wie oben beschrieben oder mit Ableitungen wie str.format()
. Ich habe versucht, eine allgemeine Frage zu schreiben, anstatt fix ma codez, kthxbye". . Für diejenigen, die es noch interessiert, habe ich hier ein Beispiel ausgearbeitet, das meinen Bedürfnissen näher kommt:
for diskfilename in os.listdir(''):
filenames = ['bob.txt', 'fred.txt', 'paul.txt']
for filename in filenames:
name, ext = filename.split('.')
regexp = "%s.*\.%s" % (name, ext)
m = re.search(regexp, diskfilename)
if m:
print diskfilename, regexp, re.search(regexp, diskfilename)
# ...
Ich versuche, den "Typ" einer Datei anhand ihres Dateinamens herauszufinden, und zwar in der Form <filename>_<date>.<extension>
. In meinem echten Code ist die filenames
Array ist ein dict, das eine Funktion enthält, die aufgerufen wird, sobald eine Übereinstimmung gefunden wurde.
Andere Möglichkeiten, die ich in Betracht gezogen habe:
-
Einen regulären Ausdruck im Array haben. Ich habe bereits ein Array von Dateinamen ohne reguläre Ausdrücke Magie, so dass ich abgeneigt bin, dies zu tun. Ich habe dies an anderer Stelle in meinem Code getan und seine ein Chaos (obwohl notwendig dort).
-
Übereinstimmung nur am Anfang des Dateinamens. Dies würde zwar funktionieren, aber mit .bak-Kopien von Dateien usw. nicht funktionieren. Irgendwann werde ich wahrscheinlich das Datum aus dem Dateinamen extrahieren wollen, also müsste ich sowieso einen regulären Ausdruck verwenden.
Danke für die Antworten, die Alternativen zu regulären Ausdrücken vorschlagen, um das gleiche Ergebnis zu erzielen. Ich war mehr daran interessiert, reguläre Ausdrücke für jetzt und für die Zukunft zu parametrisieren. Ich bin nie auf fnmatch Es ist also auf lange Sicht sehr nützlich.