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

时间:2015-05-19 00:48:19

标签: python nltk

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

谢谢, 本

5 个答案:

答案 0 :(得分:25)

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

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

答案 1 :(得分:11)

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

答案 2 :(得分:5)

尝试重新。

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

答案 3 :(得分:1)

以下是使用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!
>>> 

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

>>> 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!
>>>

答案 4 :(得分:1)

另一种做你要求的方法是使用for循环将一个字符串中的字符添加到另一个新的空字符串。一个友好的提醒,字符串是不可变的。这是一种更加自然的友好方法,可以解决迭代时ch的可能结果。

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

有时,最基本的做事方式可以在以后审核您的代码时提供帮助,比如几个月后,您可能希望更改代码。