0

解析したい文字列は「{average:12.1km/ltr}」のようなものです。この文字列から12.1を抽出したいと思います。私が知っている唯一の方法は、split( ":")とsplit( "km / ltr")などを使用することですが、これらは役に立たないようです。scanfのようなメソッドを使用して12.1を抽出したいのですが、Pythonドキュメントでは、正規表現を使用する方がscanfのような関数よりも優れていることが示されています。正規表現は抽出には使用できませんが。reを使用してこれをどのように抽出する必要がありますか?

4

5 に答える 5

1

以下を使用して、文字列から数値部分を抽出することができたと思います。

  • 秘訣は、ピリオドを挟んだ数字は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(":")とおっしゃってsplit("km/ltr")いたので、文字列の形式は常に、のようになっていると思います。:__X__km/ltrここ__X__で、は数字です。

次の正規表現が機能します。

:(\d.+)km

例:

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

次に、関数を使用してfloatとして解析できfloat()ます。

于 2013-02-05T10:05:59.510 に答える