2012-09-15 19 views
14

Me gustaría REEMPLAZAR (y NO QUITAR) todos los caracteres de puntuación por "" en una cadena en python. ¿Hay algo eficiente de este sabor:cómo reemplazar la puntuación en una cadena de pitones?

text = text.translate(string.maketrans("",""), string.punctuation) 

gracias registro

+0

s = s.replace ('antiguo', 'nuevo') –

+0

posible duplicado de [Mejor manera de quitar la puntuación de una cadena en Python] (http: // stackoverf low.com/questions/265960/best-way-to-strip-punctuation-from-a-string-in-python) –

+0

¿cuál es la diferencia entre REMOVE vs REPLACE con nada ?? – wroniasty

Respuesta

36

Esta respuesta es para Python 2 y sólo funcionará para cadenas de caracteres ASCII:

El módulo de cadena contiene dos cosas que te ayudarán: una lista de signos de puntuación acters y la función "maketrans". He aquí cómo puede usarlos:

import string 
replace_punctuation = string.maketrans(string.punctuation, ' '*len(string.punctuation)) 
text = text.translate(replace_punctuation) 
+2

Esta es la solución más rápida, superando fácilmente la opción de expresión regular –

+0

gracias, esto es lo que estaba buscando :) – register

+0

De lejos, la mejor respuesta, rápida y completa. :-) – ProfVersaggi

9

solución Modificado de Best way to strip punctuation from a string in Python

import string 
import re 

regex = re.compile('[%s]' % re.escape(string.punctuation)) 
out = regex.sub(' ', "This is, fortunately. A Test! string") 
# out = 'This is fortunately A Test string' 
+0

¿Cómo mantendría apóstrofes, por ejemplo en la palabra no? No quiero que se eliminen los apóstrofos, así que me quedo con "no". –

+0

Puede eliminar el apóstrofo de string.punctuation (que a su vez es solo una cadena que contiene todos los caracteres de puntuación). 'string.punctuation.replace (" '"," ")' conduce a ''!" # $% &() * +, -./:; <=>? @ [\\]^_ '{|} ~ '' – Gregor

+0

Gracias! Eso funciona –

0

reemplazar por ''? ¿cuál es la diferencia entre traducir todo ';' en '' y eliminar todo ';'? Aquí está para eliminar todo ';'

s = 'dsda;;dsd;sad' 
table = string.maketrans('','') 
string.translate(s, table, ';') 

y usted puede hacer su sustitución por traducir

+0

¿quién sabe por qué no puedo usar el estilo de código a veces? – cheneydeng

0

En mi manera específica, quité "+" y "&" de la lista de puntuacion:

all_punctuations = string.punctuation 
selected_punctuations = re.sub(r'(\&|\+)', "", all_punctuations) 
print selected_punctuations 

str = "he+llo* ithis& place% if you * here @@" 
punctuation_regex = re.compile('[%s]' % re.escape(selected_punctuations)) 
punc_free = punctuation_regex.sub("",str) 
print punc_free 

resultado: He + llo ithis & lugar si aquí

Cuestiones relacionadas