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 ''
.
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!
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. :-)