有没有一种有效的方法从python中删除字符串中的数字?使用nltk或base python?
谢谢, 本
答案 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.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
答案 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
有时,最基本的做事方式可以在以后审核您的代码时提供帮助,比如几个月后,您可能希望更改代码。