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
-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. –
@ChrisMorgan: Je pense que vous êtes trop dur –
@EliBendersky: peut-être. –