una reemplazar quitar lista especiales eliminar elementos elemento como comas caracteres cadena python string python-3.x

reemplazar - quitar comas de un string python



Eliminar caracteres de control de una cadena en python (7)

Actualmente tengo el siguiente código

def removeControlCharacters(line): i = 0 for c in line: if (c < chr(32)): line = line[:i - 1] + line[i+1:] i += 1 return line

Esto simplemente no funciona si hay más de un personaje para eliminar.


Cualquier persona interesada en una clase de caracteres regex que coincida con cualquier personaje de control Unicode puede usar [/x00-/x1f/x7f-/x9f] .

Puede probarlo así:

>>> import unicodedata, re, sys >>> all_chars = [chr(i) for i in range(sys.maxunicode)] >>> control_chars = ''''.join(c for c in all_chars if unicodedata.category(c) == ''Cc'') >>> expanded_class = ''''.join(c for c in all_chars if re.match(r''[/x00-/x1f/x7f-/x9f]'', c)) >>> control_chars == expanded_class True

Por lo tanto, para eliminar los caracteres de control usando re solo usa lo siguiente:

>>> re.sub(r''[/x00-/x1f/x7f-/x9f]'', '''', ''abc/02de'') ''abcde''


Hay cientos de caracteres de control en Unicode. Si está desinfectando datos de la web o de alguna otra fuente que pueda contener caracteres que no sean ascii, necesitará el módulo unicodedata de Python. La función unicodedata.category(…) devuelve el código de categoría Unicode (por ejemplo, carácter de control, espacios en blanco, letra, etc.) de cualquier carácter. Para los caracteres de control, la categoría siempre comienza con "C".

Este fragmento elimina todos los caracteres de control de una cadena.

import unicodedata def remove_control_characters(s): return "".join(ch for ch in s if unicodedata.category(ch)[0]!="C")

Ejemplos de categorías Unicode :

>>> from unicodedata import category >>> category(''/r'') # carriage return --> Cc : control character ''Cc'' >>> category(''/0'') # null character ---> Cc : control character ''Cc'' >>> category(''/t'') # tab --------------> Cc : control character ''Cc'' >>> category('' '') # space ------------> Zs : separator, space ''Zs'' >>> category(u''/u200A'') # hair space -------> Zs : separator, space ''Zs'' >>> category(u''/u200b'') # zero width space -> Cf : control character, formatting ''Cf'' >>> category(''A'') # letter "A" -------> Lu : letter, uppercase ''Lu'' >>> category(u''/u4e21'') # δΈ‘ ---------------> Lo : letter, other ''Lo'' >>> category('','') # comma -----------> Po : punctuation ''Po'' >>>


Puede usar str.translate con el mapa apropiado, por ejemplo, así:

>>> mpa = dict.fromkeys(range(32)) >>> ''abc/02de''.translate(mpa) ''abcde''


Su implementación es incorrecta porque el valor de i es incorrecto. Sin embargo, ese no es el único problema: también usa operaciones de cadenas lentas repetidas veces, lo que significa que se ejecuta en O (n 2 ) en lugar de O (n). Pruebe esto en su lugar:

return ''''.join(c for c in line if ord(c) >= 32)


Usted modifica la línea durante iterar sobre ella. Algo como ''''.join([x for x in line if ord(x) >= 32])


Y para Python 2, con la translate integrada:

import string all_bytes = string.maketrans('''', '''') # String of 256 characters with (byte) value 0 to 255 line.translate(all_bytes, all_bytes[:32]) # All bytes < 32 are deleted (the second argument lists the bytes to delete)


filter(string.printable[:-5].__contains__,line)