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

5

我需要从多个字符串中提取一个数字(时间值),如何优雅地实现?所有数字都是正数,最多有两位小数。(例如:2.3 / 40.09 / 101.4 - 没有使用E表示法的数字)。我需要的代码应该像以下伪代码一样执行:

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

1
定义“数字”。 -2.3+4.5e-1270xcafebabe - georg
在这种特殊情况下,只有最多两位数的正数是可能的,因为时间示例接近实际任务:仅使用正时间值。 - aldorado
2个回答

12

不要使用strip函数,使用正则表达式选择数字:

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

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']

这里有一些复杂的内容涉及负数和科学计数法 - 这些可能超出了OP的范围。https://dev59.com/ZXE95IYBdhLWcg3wft1w - Peter DeGlopper
1
@PeterDeGlopper:由于OP特别想去掉除了.0123456789以外的所有东西,所以我保持简单。 - Martijn Pieters

9

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

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接