从 Python 中的字符串中去除数字

Strip Numbers From String in Python

有没有一种有效的方法可以从 python 中的字符串中删除数字?使用 nltk 或 base python?

谢谢, 本

是的,您可以为此使用正则表达式:

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

str.translate应该是有效率的。

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

str.translatere.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

重新尝试

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

这是一个使用 str.join()str.isnumeric() 的方法,以及一个在 3.x 中有效的生成器表达式:

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

这也适用于 2.x,如果您使用 unicode 字符串:

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

嗯。放一个回形针,我们就会有 MacGyver.

的一集

更新

我知道这已作为副本关闭,但这里有一种方法适用于 Python 2 和 Python 3:

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