Python:除去数字以外的所有内容

问题描述 投票:5回答:2

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

>>> "It took 2.3 seconds".strip(everything but ".1234567890")
2.3
python string numeric strip
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']

7
投票

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

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

但是,这是extremely天真的提取数字的方法。如果您不仅想要像您所要求的简单字符过滤器,还应该使用Martijn Pieters的答案。

© www.soinside.com 2019 - 2024. All rights reserved.