Python: split() de palavras com "strings protegidas"

Palavras-chave: Python, split, tokenizacão, análise léxica, parser, strings, quotes, aspas

O módulo re possui a conveniente função split(), que faz o mesmo que o split() dos strings, mas aceita expressões regulares como separador. Isto pode ser aproveitado para fazer um “parser de pobre” para casos simples, como por exemplo, quebrar um texto em palavras, levando em conta “strings” entre aspas:

 >>> texto="lorem ipsum dolor 'hello world' 'mais texto'' assim'"
 >>> print filter(None,re.split("('(?:[^']|'')*')| ", texto))
['lorem', 'ipsum', 'dolor', "'hello world'", "'mais texto'' assim'"]

O filter() é necessário para remover espaços em branco e Nones que sobram no resultado. Como bônus, strings podem conter ' escapados com ''.

This entry was posted in Python. Bookmark the permalink.

2 Responses to Python: split() de palavras com "strings protegidas"

  1. Isto poderia ser um comportamento nato da própria função split, ou ao menos uma função no módulo ConfigParser (oh, claro, neste caso teria de parsear uma linha CSV, mas já seria lucro :p)

    Bem, já que não temos isto, usemos o método indicado. A dica realmente é muito boa!

  2. TaQ says:

    O método split das Strings em Ruby já faz isso direto também (aceitar expressões regulares), é só passar a expressão como parâmetro e mandar bala. :-)

Leave a Reply

Your email address will not be published. Required fields are marked *