5

複数の文字列のそれぞれから数値 (測定された時間値) を抽出する必要があります。どうすればこれをエレガントに行うことができますか? すべての数値は正で、小数点以下 2 桁までです。(例: 2.3/ 40.09/ 101.4 - E 表記に数字なし)。私が探しているコードは、次の疑似コードのようにする必要があります。

>>> "It took 2.3 seconds".strip(everything but ".1234567890")
2.3
4

2 に答える 2

12

ストリップの代わりに、正規表現で数値を選択します。

import re

numbers = re.compile(r'\d+(?:\.\d+)?')
numbers.findall("It took 2.3 seconds")

デモ:

>>> import re
>>> numbers = re.compile(r'\d+(?:\.\d+)?')
>>> numbers.findall("It took 2.3 seconds")
['2.3']

これは、すべての一致のリストを返します。これにより、文字列内の複数の数値も検索できます。

>>> numbers.findall("It took between 2.3 and 42.31 seconds")
['2.3', '42.31']
于 2013-10-25T15:44:14.703 に答える
9

別の文字列に含まれていないすべての文字を削除するだけの場合は、次のようなものをお勧めします。

>>> to_filter = "It took 2.3 seconds"
>>> "".join(_ for _ in to_filter if _ in ".1234567890")
'2.3'

ただし、数値を抽出するのは非常に単純な方法です。あなたが求めたような単純な文字フィルター以上のものを望むなら、Martijn Pieters による答えを使うべきです。

于 2013-10-25T17:02:57.303 に答える