Ao utilizar expressões regulares em Python, por padrão, seu texto é interpretado como uma seqüência de caracteres ASCII comum. Assim, caracteres acentuados são considerados sinais gráficos especiais, e não são capturados como letras. Veja este exemplo:
>>> import re
>>> print re.sub(r"\b","|","era uma criança")
|era| |uma| |crian|ç|a|
Como você pode ver, o ce-cedilha não é considerado uma letra, “quebrando” a palavra. Resolver isso é muito fácil, basta compilar a expressão regular passando a flag L, para que ela siga o locale de sua máquina, ou a flag U, para que ela trabalhe com unicode. No meu caso, em que o locale da máquina é unicode, tanto faz. Veja como funciona:
>>> import re
>>> c=re.compile(r"\b",re.U)
>>> print c.sub("|",u"era uma criança")
|era| |uma| |criança|
Só não se esqueça de trabalhar com strings unicode.
Preciso do código fonte de um programa, pode ser em python, que permita ao usuário digitar um expressâo regular e depois digitar a palavra. No final o programa deve dizer se a palavra foi reconhecida ou não.
tem como me ajudar
tenta isso:
dudu =”O cão está com você.”
print dudu
dede= dudu.decode(‘iso8859-1’)#converte
print dede
dudu = dede.encode(‘iso8859-1′)#desconverte #’utf-8’
print dudu
DGmike, acho que não dá pra tornar isso padrão. Mas quanto à segunda pergunta, você pode prefixar as expressões com “(?u)”. Por exemplo: r”(?u)\b”. Espero que ajude 😉
Assim dando uma olhada do nada me veio a idéia …
Sou programador, sou uma anta em design … Você é programador, conhece bem design, é apaixonado por Python como já ouvi numa palestra, pq vc não migra um pouco para Java (J2ME), e começa a produzir coisas boas para PDAS, Smartphones, e MicroEditionMachine em afins …?
meu blog: http://d3rf.wordpress.com
Legal, Elcio…
duas perguntas,
– tem como definir isso em algum arquivo de configuração para ser padrão?
– podemos fazer isto:
re = re.compile (r”\b”, re.U)
para não prescisar chamar o c.sub e sim o re.sub ?
Uma vez eu quis fazer uma função Python pra reescritas de url’s, da mesma forma que o WordPress faz. Depois de ler este tutorial, a solução que eu encontrei foi:
def urlize(str):
url = unicode(str, 'latin-1')
url = unicodedata.normalize('NFKD', url).encode('ascii', 'ignore')
url = re.sub(r'[^\w\d-]', '', url.replace(' ', '-').replace('--', '').lower())
return url
Não sei se esta seria a melhor forma e fazer isso, mas foi o jeito que eu achei. 🙂