[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