[英]How to parse a formatted string using Python(re)
我要解析的字符串就像“ {average:12.1km / ltr}”。 我想从该字符串中提取12.1。 我知道的唯一方法是使用split(“:”)和split(“ km / ltr”)左右,但是这些似乎没有用。 我想使用类似scanf的方法来提取12.1,但在python文档中,它表明使用正则表达式要优于类似于scanf的函数。 我虽然不能使用正则表达式提取。 我应该如何使用re提取它?
我认为您可以简单地使用以下内容从字符串中提取数字部分。
这是样本
>>> re.findall("\d+\.?\d*|\.\d+",st)
>>> st = "{average:12.1km/ltr}"
>>> re.findall("\d+\.?\d*|\.\d+",st)
['12.1']
>>> st = "{average:12km/ltr}"
>>> re.findall("\d+\.?\d*|\.\d+",st)
['12']
>>> st = "{average:.5km/ltr}"
>>> re.findall("\d+\.?\d*|\.\d+",st)
['.5']
>>> st = "{average:12.km/ltr}"
>>> re.findall("\d+\.?\d*|\.\d+",st)
['12.']
>>> st = " {max:26.9kgm@6100rpm}"
>>> re.findall("\d+\.?\d*|\.\d+",st)
['26.9', '6100']
只需strip
所有不需要的字符-不需要正则表达式(尽管我喜欢它们...)
>>> import string
>>> s = "{average:12.1km/ltr}"
>>> s2 = s.strip(string.ascii_letters + "{}:/")
>>> print s2
12.1
>>> number = float(s2)
>>> print number
12.1
假设数字可能不带点,请尝试此操作。
import re
re.findall('[0-9]+(\.[0-9]+)?', str)
怎么又脏又快
re.findall('[\d.]+',s)
这适用于您的示例。
您说您尝试过split(":")
和split("km/ltr")
,所以我假设字符串的格式总是像:__X__km/ltr
,其中__X__
是一个数字。
以下正则表达式将起作用:
:(\d.+)km
例:
>>> import re
>>> re.findall(':(\d.+)km', '{average:12.1km/ltr}')
['12.1']
>>>
然后,您可以使用float()
函数将其解析为float。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.