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