我要解析的字符串类似于“{average:12.1km / ltr}”。我想从这个字符串中提取12.1。我知道的唯一方法是使用split(“:”)和split(“km / ltr”)左右,但这些似乎没用。我想使用类似scanf的方法来提取12.1,但是在python文档中,它表明使用正则表达式比类似scanf的函数更好。我虽然常规快递不能用于提取。我该如何使用re?
提取它答案 0 :(得分:1)
我认为您可以简单地使用以下内容从字符串中提取数字部分。
以下是样本
>>> 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']
答案 1 :(得分:1)
只需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
答案 2 :(得分:1)
试试这个,假设数字可能没有点。
import re
re.findall('[0-9]+(\.[0-9]+)?', str)
答案 3 :(得分:0)
又脏又快
re.findall('[\d.]+',s)
这适用于您的示例。
答案 4 :(得分:0)
您说您尝试过split(":")
和split("km/ltr")
,因此我认为字符串的格式总是像:__X__km/ltr
,其中__X__
是一个数字。
以下正则表达式将起作用:
:(\d.+)km
示例:
>>> import re
>>> re.findall(':(\d.+)km', '{average:12.1km/ltr}')
['12.1']
>>>
然后你可以使用float()
函数解析为float。