Python:剥离除数字之外的一切

ald*_*ado 4 python string numeric strip

我必须从几个字符串中的每一个中提取一个数字(一个测量的时间值).我怎么能优雅地做到这一点?所有数字都是正数,最多有两位小数.(例如:2.3/40.09/101.4 - E表示法中没有数字).我正在寻找的代码应该做类似下面的伪代码:

>>> "It took 2.3 seconds".strip(everything but ".1234567890")
2.3
Run Code Online (Sandbox Code Playgroud)

Mar*_*ers 11

而不是条带,选择具有正则表达式的数字:

import re

numbers = re.compile('\d+(?:\.\d+)?')
numbers.findall("It took 2.3 seconds")
Run Code Online (Sandbox Code Playgroud)

演示:

>>> import re
>>> numbers = re.compile('\d+(?:\.\d+)?')
>>> numbers.findall("It took 2.3 seconds")
['2.3']
Run Code Online (Sandbox Code Playgroud)

这将返回所有匹配的列表; 这可以让你在字符串中找到多个数字:

>>> numbers.findall("It took between 2.3 and 42.31 seconds")
['2.3', '42.31']
Run Code Online (Sandbox Code Playgroud)

  • @Juhana:Ick,愚蠢的遗漏.固定. (3认同)

Tha*_*all 6

如果你要做的就是删除所有不在另一个字符串中的字符,我建议如下:

>>> to_filter = "It took 2.3 seconds"
>>> "".join(_ for _ in to_filter if _ in ".1234567890")
'2.3'
Run Code Online (Sandbox Code Playgroud)

然而,这是一种非常天真的提取数字的方法.你应该使用Martijn Pieters的答案,如果你想要的不仅仅是你想要的简单字符过滤器.