我必须从几个字符串中的每一个中提取一个数字(测量的时间值)。我怎样才能优雅地做到这一点?所有数字均为正数,最多有两个小数位。(例如:2.3/40.09/101.4 - E表示法中没有数字)。我正在寻找的代码应该执行类似于以下伪代码的操作:
>>> "It took 2.3 seconds".strip(everything but ".1234567890")
2.3
不要选择
带形,而是使用正则表达式选择数字:
import re
numbers = re.compile(r'd+(?:.d+)?')
numbers.findall("It took 2.3 seconds")
演示:
>>> import re
>>> numbers = re.compile(r'd+(?:.d+)?')
>>> numbers.findall("It took 2.3 seconds")
['2.3']
这将返回所有匹配项的列表;这也允许您在一个字符串中找到多个数字:
>>> numbers.findall("It took between 2.3 and 42.31 seconds")
['2.3', '42.31']
如果您只想删除所有不在另一个字符串中的字符,我建议如下:
>>> to_filter = "It took 2.3 seconds"
>>> "".join(_ for _ in to_filter if _ in ".1234567890")
'2.3'
然而,这是一种极其幼稚的提取数字的方法。你应该使用Martijn Pieters的答案,如果你想要的不仅仅是你要求的一个简单的字符过滤器。