Eu tenho uma string com a qual desejo substituir qualquer caractere que não seja um caractere ou número padrão, como (az ou 0-9), por um asterisco. Por exemplo, "h ^ & ell`., | Ow] {+ orld" é substituído por "h * ell * o * w * orld". Observe que vários caracteres como "^ &" são substituídos por um asterisco. Como eu faria isso?
99
Respostas:
Regex para o resgate!
Exemplo:
fonte
re.sub("[\x00-\x2F\x3A-\x40\x5B-\x60\x7B-\x7F]+", " ", ":%# unicode ΣΘΙП@./\n")
import re; regex = re.compile('[^0-9a-zA-Z]+'); regex.sub('*', 'h^&ell.,|o w]{+orld')
\W
é para caracteres que não são palavras, é quase o mesmo, mas permite o sublinhado como um caractere de palavra (não sei por quê): docs.python.org/3.6/library/re.html#index-32A maneira pítônica.
Isso não lida com o agrupamento de vários caracteres consecutivos não correspondentes, ou seja,
"h^&i => "h**i
não"h*i"
como nas soluções regex.fonte
Experimentar:
em Python3:
Editar: percebi que o OP deseja substituir os não caracteres por '*'. Minha resposta não se encaixa
fonte
Use o
\W
que é equivalente a[^a-zA-Z0-9_]
. Verifique a documentação, https://docs.python.org/2/library/re.htmlatualização: Esta solução também excluirá o sublinhado. Se você deseja que apenas alfabetos e números sejam excluídos, a solução por nneonneo é mais apropriada.
fonte
\W
é equivalente a[^a-zA-Z0-9_]
apenas no Python 2.x. No Python 3.x,\W+
é equivalente a[^a-zA-Z0-9_]
apenas sere.ASCII
/re.A
flag for usado.