web-dev-qa-db-fra.com

Comment supprimer des symboles d'une chaîne avec Python?

Je suis un débutant avec les deux Python et RegEx, et j'aimerais savoir comment créer une chaîne qui prend des symboles et les remplace par des espaces. Toute aide est excellente.

Par exemple:

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

dans:

how much for the maple syrup 20 99 That s ridiculous
63
aaront

Une manière, en utilisant expressions régulières :

>>> 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 fera correspondre les caractères alphanumériques et les traits de soulignement

  • [^\w] correspondra à tout ce qui est pas alphanumérique ou trait de soulignement

117
dF.

Parfois, il faut plus de temps pour comprendre l'expression rationnelle que pour l'écrire 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 vous avez besoin d'autres personnages, vous pouvez le changer pour utiliser une liste blanche ou étendre votre liste noire.

Exemple de liste blanche:

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

Exemple de liste blanche utilisant une expression-générateur:

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

Je viens souvent d'ouvrir la console et chercher la solution dans les méthodes des objets. Assez souvent c'est déjà là:

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

Réponse courte: Utilisez string.replace().

7
buster