0

我要解析的字符串就像“{average:12.1km/ltr}”。我想从这个字符串中提取 12.1。我知道的唯一方法是使用 split(":") 和 split("km/ltr") 左右,但这些似乎没有用。我想用scanf-like方法提取12.1,但是在python文档中显示使用正则表达式比scanf-like函数好。我虽然不能在提取中使用正则表达式。我应该如何使用 re 提取它?

4

5 回答 5

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']
于 2013-02-05T09:47:58.497 回答
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
于 2013-02-05T09:51:59.653 回答
1

试试这个,假设数字可能没有点。

import re
re.findall('[0-9]+(\.[0-9]+)?', str)
于 2013-02-05T09:52:15.133 回答
0

又脏又快怎么样

re.findall('[\d.]+',s)

这适用于您的示例。

于 2013-02-05T09:48:46.617 回答
0

你说你试过split(":")and split("km/ltr"),所以我假设字符串的格式总是像:__X__km/ltr,其中__X__是一个数字。

以下正则表达式将起作用:

:(\d.+)km

例子:

>>> import re
>>> re.findall(':(\d.+)km', '{average:12.1km/ltr}')
['12.1']
>>>

然后您可以使用该float()函数将其解析为浮点数。

于 2013-02-05T10:05:59.510 回答