2009-05-18 23 views
45

Soy un principiante con Python y RegEx, y me gustaría saber cómo hacer una cadena que tome símbolos y los reemplace con espacios. Cualquier ayuda es genial.¿Cómo eliminar símbolos de una cadena con Python?

Por ejemplo:

how much for the maple syrup? $20.99? That's ricidulous!!! 

en:

how much for the maple syrup 20 99 That s ridiculous 
+7

extraño esta se marca como un duplicado de una pregunta formulada durante un año más tarde. – monkut

+0

Mi consejo es leer la documentación de la biblioteca [re] (http://docs.python.org/library/re.html). Incluye algunos ejemplos bastante buenos. –

Respuesta

90

Una forma, utilizando regular expressions:

>>> s = "how much for the maple syrup? $20.99? That's ridiculous!!!" 
>>> re.sub(r'[^\w]', ' ', s) 
'how much for the maple syrup 20 99 That s ridiculous ' 
  • \w coincidirá con caracteres alfanuméricos y guiones

  • [^\w] coincidirá con cualquier cosa que sea no alfanuméricos o guión

+13

Se debe tener en cuenta que^\ w fuera de los paréntesis significa 'combinar un carácter alfanumérico al principio de una línea'. Solo entre corchetes ([^ \ w]) el símbolo de intercalación significa 'ignorar todos los caracteres aquí' – cmptrgeekken

+1

@cmptrgeekken: Gracias, corregido. –

+9

en lugar de [^ \ w] también puede usar \ W, que es lo contrario de \ w. – Ikke

3

A menudo basta con abrir la consola y buscar la solución en los métodos de objetos. Muy a menudo ya está ahí:

>>> a = "hello ' s" 
>>> dir(a) 
[ (....) 'partition', 'replace' (....)] 
>>> a.replace("'", " ") 
'hello s' 

Respuesta corta: Uso string.replace().

20

A veces se necesita más tiempo para averiguar la expresión regular que con solo escribirlo en Python:

import string 
s = "how much for the maple syrup? $20.99? That's ricidulous!!!" 
for char in string.punctuation: 
    s = s.replace(char, ' ') 

Si necesita otros caracteres que se pueden cambiar para utilizar una lista blanca o ampliar su lista de negro .

Muestra lista blanca:

whitelist = string.letters + string.digits + ' ' 
new_s = '' 
for char in s: 
    if char in whitelist: 
     new_s += char 
    else: 
     new_s += ' ' 

Muestra lista blanca utilizando un generador de expresión:

whitelist = string.letters + string.digits + ' ' 
new_s = ''.join(c for c in s if c in whitelist) 
+2

Acabo de utilizar este método de lista blanca para un proyecto en el que estoy trabajando. ¡Gracias! –

+0

+1, pitónico, me encanta. – lwm

Cuestiones relacionadas