[Python-de] RegEx Problem

Diez B. Roggisch deets at web.de
Don Jan 6 15:35:11 CET 2005


> Ich bin gerade dabei einen kleinen BBCode Parser zu basteln. Ich brauche
> nur Tags in der Form [<tag>]<text>[/<tag>]. Mein Problem tritt auf, wenn
> zwei Tags ineinander verschaltet sind: [b][u]Fetter, unterstrichener
> Text[/u][/b]. Mit folgender Funktion erhalte ich aber dann
> ('b','[u]Fetter, unterstrichener Text','u'). Ich habe auch schon
> versucht als zweite Gruppe alles außer [ und ] zu erlauben, hat aber
> nicht geklappt.

Du kannst da eventuell so loesen:

import re

def parse_bbcode(text):
    print text
    bbcodes = []
    pattern = re.compile('\[(?P<tagtype>.+?)\](.+?)\[/(?P=tagtype)\]')
    matches = pattern.findall(text)
    for bit in matches:
        print bit
        bbcodes.append((bit[0], bit[1]))
        if (pattern.search(bit[1])):
            parse_bbcode(bit[1])


if __name__ ==  "__main__":
    parse_bbcode("[b][u]Fetter, unterstrichener Text[/u][/b]")
    

Das Problem ist allerdings, das bei geschachtelten _gleichen_ tags das ganze 
nicht mehr funktioniert - und auch nicht funktionieren kann, weil regulaere 
Ausdruecke dafuer nicht maechtig genug sind. Das Problem ist, das 
html/xm/bbcode durch kontext-freie grammatiken repraesentiert werden, und 
dazu sind regulaere Ausdruecke nicht faehig.

Da musst du dann einen eigenen Parser schreiben - ich wuerde versuchen, ob ich 
bbcode-tags nicht in xml-konforme tags wandeln kann und dann den Standard xml 
Weg gehen.

Diez