web-dev-qa-db-fra.com

Supprimer les numéros d'une chaîne en Python

Existe-t-il un moyen efficace d’exclure des nombres d’une chaîne en python? Vous utilisez nltk ou base python?

Merci, Ben

6
ben890

Oui, vous pouvez utiliser une expression régulière pour cela:

import re
output = re.sub(r'\d+', '', '123hello 456world')
print output  # 'hello world'
23
Martin Konecny

str.translate devrait être efficace.

In [7]: 'hello467'.translate(None, '0123456789')
Out[7]: 'hello'

Pour comparer str.translate à re.sub:

In [13]: %%timeit r=re.compile(r'\d')
output = r.sub('', my_str)
   ....: 
100000 loops, best of 3: 5.46 µs per loop

In [16]: %%timeit pass
output = my_str.translate(None, '0123456789')
   ....: 
1000000 loops, best of 3: 713 ns per loop
11
Robᵩ

Essayez re.

import re
my_str = '123hello 456world'
output = re.sub('[0-9]+', '', my_str)
4
optimcode

Voici une méthode utilisant str.join(), str.isnumeric() et une expression génératrice qui fonctionnera sous 3.x:

>>> my_str = '123Hello, World!4567'
>>> output = ''.join(c for c in my_str if not c.isnumeric())
>>> print(output)
Hello, World!
>>> 

Cela fonctionnera également sous 2.x si vous utilisez une chaîne unicode:

>>> my_str = u'123Hello, World!4567'
>>> output = ''.join(c for c in my_str if not c.isnumeric())
>>> print(output)
Hello, World!
>>> 

Hmm. Jeter dans un trombone et nous aurions un épisode de MacGyver .

Mettre à jour

Je sais que cela a été fermé en tant que doublon, mais voici une méthode qui fonctionne à la fois pour Python 2 et Python 3:

>>> my_str = '123Hello, World!4567'
>>> output = ''.join(map(lambda c: '' if c in '0123456789' else c, my_str))
>>> print(output)
Hello, World!
>>>
1
Doug R.

Une autre méthode pour faire ce que vous demandez est d'ajouter des caractères d'une chaîne à une autre nouvelle chaîne vide à l'aide d'une boucle for. Un rappel amical que les chaînes sont immuables. Il s’agit d’une approche plus conviviale qui examine les résultats possibles de ce que ch peut être lors d’une itération. 

def removeNumbersFromStrings(string):
newString = ""
for ch in string:
    if ch == '0' or ch == '1' or ch == '2' or ch == '3' or ch == '4' or ch == '5' or ch == '6' or ch == '7' or ch == '8' or ch == '9':
        newString = newString 
    else:
        newString = newString + ch
return newString

Parfois, la façon la plus simple de faire quelque chose peut vraiment aider lors de la révision ultérieure de votre code, par exemple des mois plus tard, lorsque vous souhaiterez le modifier.

1
Allison