web-dev-qa-db-fra.com

Comment remplacer la ponctuation dans une chaîne en Python?

Je voudrais remplacer (et non supprimer ) tous les caractères de ponctuation par "" dans une chaîne en Python.

Y a-t-il quelque chose d'efficace de la saveur suivante?

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

Cette réponse concerne Python 2 et ne fonctionnera que pour les chaînes ASCII:

Le module chaîne contient deux éléments qui vous aideront: une liste de caractères de ponctuation et la fonction "maketrans". Voici comment vous pouvez les utiliser:

import string
replace_punctuation = string.maketrans(string.punctuation, ' '*len(string.punctuation))
text = text.translate(replace_punctuation)
41
Benji York

Solution modifiée de Le meilleur moyen de supprimer la ponctuation d'une chaîne en 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'
13
Gregor

Il existe une solution plus robuste qui repose sur une exclusion de regex plutôt que sur une liste exhaustive de caractères de ponctuation.

import re
print(re.sub('[^\w\s]', '', 'This is, fortunately. A Test! string'))
#Output - 'This is fortunately A Test string'

La regex attrape tout ce qui n'est pas un caractère alphanumérique ou blanc

1
Uwais Iqbal

De manière spécifique, j’ai supprimé "+" et "&" de la liste de ponctuation:

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

Résultat: il + llo ithis & place si vous ici

0
Reihan_amn

Cette solution de contournement fonctionne en python 3: 

import string
ex_str = 'SFDF-OIU .df  !hello.dfasf  sad - - d-f - sd'
#because len(string.punctuation) = 32
table = str.maketrans(string.punctuation,' '*32) 
res = ex_str.translate(table)

# res = 'SFDF OIU  df   hello dfasf  sad     d f   sd' 
0
ocean800

Remplacez par ''?.

Quelle est la différence entre traduire tout ; en '' et supprimer tout ;?

Voici pour supprimer tous les ;:

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

Et vous pouvez faire votre remplacement avec translate.

0
rpbear