2011-12-10 1 views
1

J'ai essayé de chercher ceci et seulement trouvé des réponses de PHP. J'utilise Python sur Google App Engine et j'essaie de supprimer les citations imbriquées.Supprimer les citations bbcode imbriquées dans Python?

Par exemple:

[quote user2] 
[quote user1]Hello[/quote] 
World 
[/quote] 

Je voudrais lancer quelque chose pour obtenir juste le plus citation extérieure.

[quote user2]World[/quote] 
+0

-1: ne montre pas l'effort de recherche. Qu'avez-vous essayé? Stack Overflow n'est pas là pour faire tout votre travail pour vous. –

+0

@ChrisMorgan: Je pense que vous êtes trop dur –

+0

@EliBendersky: peut-être. –

Répondre

3

Vous ne savez pas si vous voulez simplement les guillemets, ou l'entrée entière avec les guillemets imbriqués supprimés. Cet échantillon de pyparsing fait les deux:

stuff = """ 
Other stuff 
[quote user2] 
[quote user1]Hello[/quote] 
World 
[/quote] 
Other stuff after the stuff 
""" 

from pyparsing import (Word, printables, originalTextFor, Literal, OneOrMore, 
    ZeroOrMore, Forward, Suppress) 

# prototype username 
username = Word(printables, excludeChars=']') 

# BBCODE quote tags 
openQuote = originalTextFor(Literal("[") + "quote" + username + "]") 
closeQuote = Literal("[/quote]") 

# use negative lookahead to not include BBCODE quote tags in tbe body of the quote 
contentWord = ~(openQuote | closeQuote) + (Word(printables,excludeChars='[') | '[') 
content = originalTextFor(OneOrMore(contentWord)) 

# define recursive definition of quote, suppressing any nested quotes 
quotes = Forward() 
quotes << (openQuote + ZeroOrMore(Suppress(quotes) | content) + closeQuote) 

# put separate tokens back together 
quotes.setParseAction(lambda t : '\n'.join(t)) 

# quote extractor 
for q in quotes.searchString(stuff): 
    print q[0] 

# nested quote stripper 
print quotes.transformString(stuff) 

Prints:

[quote user2] 
World 
[/quote] 

Other stuff 
[quote user2] 
World 
[/quote] 
Other stuff after the stuff 
0

Vous devriez trouver et utiliser un véritable analyseur BBCode en Python. Googling apporte quelques hits - par exemple this one, et this one.

+0

Oh, je suis en train d'utiliser le premier! Mais quand je l'ai testé, les citations allaient et venaient. Je ne pensais pas que c'était peut-être capable de résoudre ce problème, je vais vérifier. – TylerW

Questions connexes