web-dev-qa-db-fra.com

Suppression de caractères non numériques d'une chaîne

J'ai reçu la tâche de supprimer tous les caractères non numériques, y compris les espaces d'un fichier texte ou d'une chaîne, puis d'imprimer le nouveau résultat à côté des anciens caractères, par exemple:

Avant:

sd67637 8

Après:

sd67637 8 = 676378

Comme je suis débutant, je ne sais pas par où commencer cette tâche. Veuillez aider

36
Obcure

La façon la plus simple est avec une expression rationnelle

import re
a = 'lkdfhisoe78347834 (())&/&745  '
result = re.sub('[^0-9]','', a)

print result
>>> '78347834745'
63
mar mar

Faites une boucle sur votre chaîne, caractère par caractère et n'incluez que des chiffres:

new_string = ''.join(ch for ch in your_string if ch.isdigit())

Ou utilisez une expression régulière sur votre chaîne (si à un moment donné vous vouliez traiter séparément les groupes non contigus) ...

import re
s = 'sd67637 8' 
new_string = ''.join(re.findall(r'\d+', s))
# 676378

Ensuite, il suffit de print les sortir:

print(old_string, '=', new_string)
18
Jon Clements

Il y a un intégré pour cela.

string.translate (s, table [ deletechars])

Supprimez tous les caractères des s qui sont dans deletechars (le cas échéant), puis traduisez les caractères à l'aide de la table, qui doit être une chaîne de 256 caractères donnant la traduction de chaque valeur de caractère, indexée par son ordinal. Si la table est Aucun, alors seule l'étape de suppression de caractère est effectuée.

>>> import string
>>> non_numeric_chars = ''.join(set(string.printable) - set(string.digits))
>>> non_numeric_chars = string.printable[10:]  # more effective method. (choose one)
'sd67637 8'.translate(None, non_numeric_chars)
'676378'

Ou vous pouvez le faire sans importation (mais il n'y a aucune raison à cela):

>>> chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~ \t\n\r\x0b\x0c'
>>> 'sd67637 8'.translate(None, chars)
'676378'
10
Inbar Rose

Vous pouvez utiliser string.ascii_letters pour identifier vos non-chiffres:

from string import *

a = 'sd67637 8'
a = a.replace(' ', '')

for i in ascii_letters:
    a = a.replace(i, '')

Si vous souhaitez remplacer deux points, utilisez des guillemets " au lieu de deux points '.

2