una signos regulares reemplazar puntuacion primer expresiones espacios eliminar elementos como caracteres caracter cadena python regex string

signos - python eliminar primer caracter



Elimina todos los caracteres especiales, signos de puntuaciĆ³n y espacios de la cadena (10)

Aquí hay una expresión regular para hacer coincidir una cadena de caracteres que no son letras o números:

[^A-Za-z0-9]+

Aquí está el comando de Python para hacer una sustitución de expresiones regulares:

re.sub(''[^A-Za-z0-9]+'', '''', mystring)

Necesito eliminar todos los caracteres especiales, signos de puntuación y espacios de una cadena para que solo tenga letras y números.


Asumiendo que quiere usar una expresión regular y quiere / necesita un código 2.x compatible con Unicode que esté listo para 2to3:

>>> import re >>> rx = re.compile(u''[/W_]+'', re.UNICODE) >>> data = u''''.join(unichr(i) for i in range(256)) >>> rx.sub(u'''', data) u''0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz/xaa/xb2 [snip] /xfe/xff'' >>>


Creo que solo funciona filter(str.isalnum, string)

In [20]: filter(str.isalnum, ''string with special chars like !,#$% etcs.'') Out[20]: ''stringwithspecialcharslikeetcs''


Después de ver esto, me interesó expandir las respuestas proporcionadas al descubrir cuál se ejecuta en el menor tiempo posible, así que revisé y revisé algunas de las respuestas propuestas con timeit comparación con dos de las cadenas de ejemplo:

  • string1 = ''Special $#! characters spaces 888323''
  • string2 = ''how much for the maple syrup? $20.99? That s ricidulous!!!''

Ejemplo 1

''.join(e for e in string if e.isalnum())

  • string1 - Resultado: 10.7061979771
  • string2 - Resultado: 7.78372597694

Ejemplo 2

import re re.sub(''[^A-Za-z0-9]+'', '''', string)

  • string1 - Resultado: 7.10785102844
  • string2 - Resultado: 4.12814903259

Ejemplo 3

import re re.sub(''/W+'','''', string)

  • string1 - Resultado: 3.11899876595
  • string2 - Resultado: 2.78014397621

Los resultados anteriores son producto del resultado devuelto más bajo de un promedio de: repeat(3, 2000000)

El ejemplo 3 puede ser 3 veces más rápido que el ejemplo 1 .


El enfoque más genérico es usar las ''categorías'' de la tabla unicodedata que clasifica cada carácter individual. Por ejemplo, el siguiente código filtra únicamente los caracteres imprimibles en función de su categoría:

import unicodedata # strip of crap characters (based on the Unicode database # categorization: # http://www.sql-und-xml.de/unicode-database/#kategorien PRINTABLE = set((''Lu'', ''Ll'', ''Nd'', ''Zs'')) def filter_non_printable(s): result = [] ws_last = False for c in s: c = unicodedata.category(c) in PRINTABLE and c or u''#'' result.append(c) return u''''.join(result).replace(u''#'', u'' '')

Mire la URL dada arriba para todas las categorías relacionadas. También puede, por supuesto, filtrar por las categorías de puntuación.


Forma más corta:

import re cleanString = re.sub(''/W+'','''', string )

Si quieres espacios entre palabras y números, sustituye '''' por ''''


Usa traductor:

import string def clean(instr): return instr.translate(None, string.punctuation + '' '')

Advertencia: solo funciona en cadenas ascii.


Esto se puede hacer sin regex :

>>> string = "Special $#! characters spaces 888323" >>> ''''.join(e for e in string if e.isalnum()) ''Specialcharactersspaces888323''

Puedes usar str.isalnum :

S.isalnum() -> bool Return True if all characters in S are alphanumeric and there is at least one character in S, False otherwise.

Si insistes en usar regex , otras soluciones funcionarán bien. Sin embargo, tenga en cuenta que si se puede hacer sin usar una expresión regular, esa es la mejor manera de hacerlo.


#!/usr/bin/python import re strs = "how much for the maple syrup? $20.99? That''s ricidulous!!!" print strs nstr = re.sub(r''[?|$|.|!]'',r'''',strs) print nstr nestr = re.sub(r''[^a-zA-Z0-9 ]'',r'''',nstr) print nestr

puedes agregar más caracteres especiales y eso será reemplazado por '''' no significa nada, es decir, se eliminarán.


import re abc = "askhnl#$%askdjalsdk" ddd = abc.replace("#$%","") print (ddd)

y verá su resultado como

''askhnlaskdjalsdk