如何使用Python解析格式化的字符串(重新)

时间:2013-02-05 09:45:24

标签: python regex python-3.x

我要解析的字符串类似于“{average:12.1km / ltr}”。我想从这个字符串中提取12.1。我知道的唯一方法是使用split(“:”)和split(“km / ltr”)左右,但这些似乎没用。我想使用类似scanf的方法来提取12.1,但是在python文档中,它表明使用正则表达式比类似scanf的函数更好。我虽然常规快递不能用于提取。我该如何使用re?

提取它

5 个答案:

答案 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。