Tengo una cadena con la que quiero reemplazar cualquier carácter que no sea un carácter o número estándar, como (az o 0-9) con un asterisco. Por ejemplo, "h ^ & ell`., | Ow] {+ orld" se reemplaza por "h * ell * o * w * orld". Tenga en cuenta que varios caracteres como "^ &" se reemplazan con un asterisco. ¿Cómo haría esto?
99
Respuestas:
¡Regex al rescate!
Ejemplo:
fuente
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
cuenta que para los caracteres que no son palabras, es casi lo mismo, pero permite el guión bajo como un carácter de palabra (no sé por qué): docs.python.org/3.6/library/re.html#index-32La forma pitónica.
Sin embargo, esto no se ocupa de agrupar varios caracteres consecutivos que no coinciden, es decir
"h^&i => "h**i
no"h*i"
como en las soluciones de expresiones regulares.fuente
Tratar:
en Python3:
Editar: se dio cuenta de que el OP quiere reemplazar los no caracteres con '*'. Mi respuesta no encaja
fuente
Utilice
\W
que sea equivalente a[^a-zA-Z0-9_]
. Consulte la documentación, https://docs.python.org/2/library/re.htmlactualización: esta solución también excluirá el subrayado. Si desea excluir solo alfabetos y números, entonces la solución de nneonneo es más apropiada.
fuente
\W
es equivalente a[^a-zA-Z0-9_]
solo en Python 2.x. En Python 3.x,\W+
es equivalente a[^a-zA-Z0-9_]
solo si se usare.ASCII
/re.A
flag.