Quiero eliminar caracteres en una cadena en python:
string.replace(',', '').replace("!", '').replace(":", '').replace(";", '')...
Pero tengo muchos personajes que tengo que eliminar. Pensé en una lista
list = [',', '!', '.', ';'...]
Pero, ¿cómo puedo usar el list
para reemplazar los caracteres en el string
?
Respuestas:
Si está utilizando python2 y sus entradas son cadenas (no unicodes), el mejor método es
str.translate
:De lo contrario, hay siguientes opciones a considerar:
A. Itere el tema char por char, omita los caracteres no deseados y
join
la lista resultante:(Tenga en cuenta que la versión del generador
''.join(c for c ...)
será menos eficiente).B. Cree una expresión regular sobre la marcha y
re.sub
con una cadena vacía:(
re.escape
asegura que los caracteres como^
o]
no rompan la expresión regular).C. Use la variante de mapeo de
translate
:Código de prueba completo y tiempos:
Resultados:
(Como nota al margen, la cifra
remove_chars_translate_bytes
podría darnos una pista de por qué la industria era reacia a adoptar Unicode durante tanto tiempo).fuente
TypeError: translate() takes exactly one argument (2 given)
. Aparentemente toma dict como argumento.Puedes usar
str.translate()
:Ejemplo:
fuente
s.translate(dict.fromkeys(map(ord, u",!.;")))
unicode.translate()
método tiene diferentes parámetros que elstr.translate()
método. Use la variante en el comentario anterior para los objetos Unicode.Puedes usar el método de traducción .
fuente
fuente
Si está utilizando python3 y está buscando el
translate
solución, la función se cambió y ahora toma 1 parámetro en lugar de 2.Ese parámetro es una tabla (puede ser un diccionario) donde cada clave es el ordinal Unicode (int) del carácter a buscar y el valor es el reemplazo (puede ser un ordinal Unicode o una cadena para asignar la clave).
Aquí hay un ejemplo de uso:
fuente
Otro enfoque usando regex:
fuente
¿Por qué no un simple bucle?
Además, evite nombrar listas 'lista'. Anula la función incorporada
list
.fuente
podrías usar algo como esto
Este código no es mío y viene de aquí, es un gran artículo y discute en profundidad haciendo esto
fuente
También un tema interesante sobre la eliminación de acento UTF-8 forma una cadena que convierte char a su char estándar no acentuado:
¿Cuál es la mejor manera de eliminar acentos en una cadena Unicode de Python?
extracto de código del tema:
fuente
Quizás una forma más moderna y funcional de lograr lo que deseas:
tenga en cuenta que para este propósito en particular es una exageración, pero una vez que necesita condiciones más complejas, el filtro es útil
fuente
manera simple,
salida:
this-is-string--foo----bar--tuna---sandwich--is---good
fuente
¿Qué tal esto?
fuente
Creo que esto es bastante simple y lo hará!
Esta es una manera de hacerlo. Pero si está cansado de mantener una lista de caracteres que desea eliminar, puede hacerlo utilizando el número de orden de las cadenas por las que itera. El número de orden es el valor ASCII de ese carácter. el número ascii para 0 como un carácter es 48 y el número ascii para z minúscula es 122, entonces:
fuente
En estos días me estoy sumergiendo en el esquema, y ahora creo que soy bueno recurriendo y evaluando. JAJAJA. Solo comparte algunas formas nuevas:
primero, evalúalo
segundo, recurse
Oye, no desestimes. Solo quiero compartir alguna idea nueva.
fuente
Estoy pensando en una solución para esto. Primero, haría la entrada de cadena como una lista. Luego reemplazaría los elementos de la lista. Luego, mediante el uso del comando join, devolveré la lista como una cadena. El código puede ser así:
Esto eliminaría cualquier cosa de la cadena. ¿Qué piensas sobre eso?
fuente
Aquí hay un
more_itertools
enfoque:Aquí dividimos los elementos encontrados en el
blacklist
, aplanamos los resultados y unimos la cadena.fuente
Python 3, implementación de comprensión de lista de una sola línea.
fuente
Eliminar *%,&@! desde abajo cadena:
fuente