5

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

>>> "It took 2.3 seconds".strip(everything but ".1234567890")
2.3
4

2 回答 2

12

使用正则表达式选择数字,而不是剥离:

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']
于 2013-10-25T15:44:14.703 回答
9

如果您只想删除不在另一个字符串中的所有字符,我建议如下:

>>> to_filter = "It took 2.3 seconds"
>>> "".join(_ for _ in to_filter if _ in ".1234567890")
'2.3'

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

于 2013-10-25T17:02:57.303 回答