在Python中从字符串中去除数字[重复]
Posted
技术标签:
【中文标题】在Python中从字符串中去除数字[重复]【英文标题】:Strip Numbers From String in Python [duplicate] 【发布时间】:2015-07-30 15:44:46 【问题描述】:有没有一种有效的方法从 python 中的字符串中去除数字?使用 nltk 还是基础 python?
谢谢, 本
【问题讨论】:
你能举例说明你想做什么吗? 如果我有一个字符串,例如:x = "I have 3 dogs" 我想要一种方法将 x 变成:"I have dogs"I have 3x as many dogs as 2 cats
会是什么?
或者.... "这是你左边的第 1 条路,然后走右边的第 2 条路,然后你要找的公司叫做 TRG1,它在这条路上大约 100m - 如果你“很懒——你可以花 2.50 英镑搭公共汽车”?
在这里查看其他好的答案:***.com/questions/12851791/…
【参考方案1】:
是的,您可以为此使用正则表达式:
import re
output = re.sub(r'\d+', '', '123hello 456world')
print output # 'hello world'
【讨论】:
这太完美了!谢谢马丁 正则表达式解决方案不会出错,因为它也可以很好地转换为其他实例(比如说他接下来要删除字母)。 最佳答案。像魅力一样工作【参考方案2】: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
【讨论】:
问题是:str.translate
要同时兼容 2.x/3.x 有点困难:(
所以你在 3.x 中需要 my_str.translate(ord(ch): None for ch in '0123456789')
我想知道 r.sub() 需要多长时间?比如说,在您想要对多个字符串执行此操作并且您已经预编译了正则表达式的情况下。
@Ross - 从我在答案中输入的代码来看,5.46µs。
@Rob - 对了,我错过了第一行是设置行。查看一些最佳/最坏情况翻译似乎在最坏情况下表现得更好。使用'python -m timeit'我遇到了以下支持翻译的情况; '123hello 456world' - x5.0
'1234567890987654321012345678909876543210' - x17.0
'5a$%&^@)9lhk45g08j%Gmj3g09jSDGjg0034k' - x9.0
'hello world im your boss' - x 1.8
【参考方案3】:
尝试重新。
import re
my_str = '123hello 456world'
output = re.sub('[0-9]+', '', my_str)
【讨论】:
你意识到你刚刚发布了一个重复的答案吗? 其实没有...我给出了不同的方式,然后使用示例 (my_str = '123hello 456world') 来说明查看我的编辑 这不是一种不同的方式——你只是使用了接受答案的长形式——\d
对应于[0-9]
【参考方案4】:
这是一个使用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!
>>>
【讨论】:
以上是关于在Python中从字符串中去除数字[重复]的主要内容,如果未能解决你的问题,请参考以下文章