Komplizierten Regulären Ausdruck vereinfachen?

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
Dauerbaustelle
User
Beiträge: 996
Registriert: Mittwoch 9. Januar 2008, 13:48

Hallo Leute,

ich bin grade dabei, eine Markupsprache zu entwerfen (auf re-Basis) und wollte dabei Blöcke nach diesem Schema hier matchen:

Code: Alles auswählen

{% blockname arguments %}blockcontent{% end blockname %}
wobei `arguments` dem Schema

Code: Alles auswählen

key=value
folgt.

Beispiele:

Code: Alles auswählen

{% code %}some code{% end code %}

{% code lang=js %}document.getElementByID('foo')...{% end code %}

{% code lang=py show_line_numbers=false %}def foo(bar): return bar{% end code %}
Dabei ist folgender Reguläre Ausdruck herausgekommen:

Code: Alles auswählen

return "{%% %(name)s%(args)s %%}(?P<c>%(p)s){%% end %(name)s %%}" % {
            'name' : name,
            'p' : pattern,
            'args': '' if not args else ''.join(
                ('( (%s)=(?P<%s>[^ ]+))?' % (arg, arg) for arg in args))
        }
wobei `name` zB für `code` steht und `p` für das Pattern für den Blockinhalt, zB `.+?`.

Meine Frage jetzt: Kann man den Ausdruck irgendwie vereinfachen? Das sieht nämlich ziemlich komisch aus alles.

Grüße

PS: Nein, ich will keine anderen libraries verwenden wie pyparsing oder so Faxen.
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Was passiert wenn jemand die Blöcke verschachtelt? Du kannst dass so nicht mit regulären Ausdrücken parsen, du musst dir schon einen Parser für so etwas schreiben. Du könntest dir dafür ja mal jinja2 oder Pygments ansehen.
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

Warum entwirfst du die Sprache nicht auf Basis von XML, dann hast du auch kein Problem das ganze zu parsen?! Sieht ja eh schon aus wie XML.

Oder du lässt es so wie es ist, machst

Code: Alles auswählen

s.replace('{*', '<').replace('*}', '>') 
und verarbeitest s dann als XML ;)
Dauerbaustelle
User
Beiträge: 996
Registriert: Mittwoch 9. Januar 2008, 13:48

ROFL :D

Naja, wo bleibt denn da der Programmierspaß ;)
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Wenn du schachteln willst, reichen reguläre Ausdrücke nicht, sie sind nicht mächtig genug. Ansonsten schaue meine Beiträge zu Template-Engines hier im Forum an oder auch dies hier.

Stefan
Antworten