如何使用Python(re)解析格式化字符串

2024-09-21 07:54:04 发布

您现在位置:Python中文网/ 问答频道 /正文

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


Tags: 方法函数字符串文档resplitkmltr
3条回答

我想您可以简单地使用以下命令从字符串中提取数字部分。在

  • 诀窍是,只有一个数字的句点在之间。在
  • 句点可以是可选的,因为数字可以是整数
  • 你也可能会遇到分数

这是样品

>>> 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']

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

import re
re.findall('[0-9]+(\.[0-9]+)?', str)

只要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

相关问题 更多 >

    热门问题