0

$15K、、などUSD20Mの金額を参照する文字列がたくさん€1.8kあります。次に、データを処理するために、数値と乗数(K、k、M、またはm)を抽出する必要があります。

私は次の正規表現を思いついた:

[\${1}|€{1}][0-9]+(?:\.[0-9]*)?[M|K|k|m]

しかし、式の各サブパートを抽出して、それらを変数としてPythonコードに戻す方法がわからないため$15K、次のようにします。

currency='$'
ammount=15
multiplier='K'

何か案は?

4

2 に答える 2

2

このような?

In [1]: import re 

In [2]: re.match(r'(?P<currency>\D+)(?P<amount>\d+(\.\d+)?)(?P<multiplier>[mMkK])', '$15k').groupdict()
Out[2]: {'amount': '15', 'currency': '$', 'multiplier': 'k'}

ただし、Pythonで本当に必要なのとは異なり、

currency, amount, _, multiplier =  re.match(r'(\D+)(\d+(\.\d+)?)([mMkK])', '$1.5k').groups()

またはさらに簡単

currency, amount, multiplier = re.match(r'(\D+)(\d+(?:\.\d+)?)([mMkK])', '$1.5k').groups()
于 2013-01-15T22:20:12.580 に答える
0

このようなもの :

In [68]: lis= ["$15K", "USD20","$1.5K"]

In [69]: l=lambda x:re.findall(r"(\$|USD)(\d*\.\d+|\d+)([MKkm])?",x)
                                    |          |           |     
                                    ^          ^           ^
                                   currency   amt          multiplier
In [70]: map(l,lis)
Out[70]: [[('$', '15', 'K')], [('USD', '20', '')], [('$', '1.5', 'K')]]
于 2013-01-15T22:33:06.080 に答える