Regular expression aus Listenelementen erstellen...

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
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

Hallo,

ich konnte bisher keine brauchbare Lösung für folgendes finden:

Code: Alles auswählen

pattern = r'[' + r''.join([r'.', r',', r'/']) + r']'
Das pattern möchte ich dann zum Splitten eines Strings via 're.split' verwenden.

Ich dachte schon, dass mir 're.template' weiterhilft, allerdings konnte ich keine doc dazu finden und offensichtlich ist diese Funktion noch experimental (warum wird sie aber dann "mitgeliefert"?).

Ich kann nicht glauben, dass es keine geschmeidigere Lösung als dieses Stringgebastel gibt um aus einer Liste bestehend aus Strings ein pattern zu erstellen...

mutetella
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
Benutzeravatar
jbs
User
Beiträge: 953
Registriert: Mittwoch 24. Juni 2009, 13:13
Wohnort: Postdam

Ich verstehe nicht, was du das vor hast. Wie soll dein Pattern aussehen und wo kommen welche Strings vor?

Aber wenn ich mal raten soll: Du möchtest einen String mittels einer Menge von Zeichen splitten, die du in einer Liste definiert hast. Was spricht denn dagegen, eine helper-function zu definieren?

Code: Alles auswählen

def splitby(s, *patterns):
    regex = '|'.join(map(re.escape, patterns))
    return re.split(regex, s)

Rawstrings helfen dir übrigens nicht für Reguläre Ausdrücke, sonder sind dazu da Python-Strings zu escapen (i.e. `\`).
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

jbs hat geschrieben:Rawstrings helfen dir übrigens nicht für Reguläre Ausdrücke, sonder sind dazu da Python-Strings zu escapen (i.e. `\`).
Wenn die RE Gruppen enthalten, helfen sie ungemein ;) Aber in allen gezeigten Literalen sind sie absolut ueberfluessig, da hast du recht.
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

jbs hat geschrieben:Ich verstehe nicht, was du das vor hast. Wie soll dein Pattern aussehen und wo kommen welche Strings vor?
Eines vorweg: Deine Lösung funktioniert prächtig, ich dachte nur, dass die regex anderst aussehen muss.
Ich möchte strings an Punkt, Komma und Schrägstrich splitten und wollte dafür das Set [.,/] als regex verwenden. Nachdem ja zumindest der Punkt escaped werden sollte, habe ich rawstrings verwendet (ok, gerade hab' ich auch gelesen, dass das innerhalb von einem Set nicht nötig ist :oops: )
Das ist, was ich vor hatte...

Um aber nochmal darauf zurückzukommen: Wenn ich ein Set oder eine Gruppe aus Strings erzeugen möchte muss ich die metacharacters "händisch" davor, dahinter oder wo auch immer einfügen?

mutetella
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
Benutzeravatar
jbs
User
Beiträge: 953
Registriert: Mittwoch 24. Juni 2009, 13:13
Wohnort: Postdam

@cofi: Ja, da habe ich mich ungenau ausgedrückt.

@mutetella: Verwende doch format-Strings. ``"[%s]" %",".join(elements)``
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

@jbs
Ich dachte halt, dass es vielleicht irgendwo in den Tiefen eine Funktion gibt, die mir ein re-Pattern aus übergebenen strings erstellt und dabei eben diese ganze Bastelarbeit übernimmt. Aber wenn ich so darüber nachdenke kann es eine solche Funktion fast nicht geben... :)

mutetella
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
Antworten