Python 从正则表达式中提取数字和以下字母

Python 从正则表达式中提取数字和以下字母,python,regex,Python,Regex,我有许多涉及货币价值的字符串,如1.5万美元,2000万美元,180万欧元,等等 现在我需要提取数字和乘数(K,K,M或M)来处理数据 我提出了以下正则表达式: [\${1}|€{1}][0-9]+(?:\.[0-9]*)?[M|K|k|m] 但我不确定如何提取表达式的每个子部分,并将它们作为变量返回到Python代码中,因此对于$15K,我希望: currency='$' ammount=15 multiplier='K' 有什么想法吗?像这样 In [1]: import re In

我有许多涉及货币价值的字符串,如
1.5万美元
2000万美元
180万欧元
,等等 现在我需要提取数字和乘数(K,K,M或M)来处理数据

我提出了以下正则表达式:

[\${1}|€{1}][0-9]+(?:\.[0-9]*)?[M|K|k|m]
但我不确定如何提取表达式的每个子部分,并将它们作为变量返回到Python代码中,因此对于
$15K
,我希望:

currency='$'
ammount=15
multiplier='K'
有什么想法吗?

像这样

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'}
甚至更简单

currency, amount, multiplier = re.match(r'(\D+)(\d+(?:\.\d+)?)([mMkK])', '$1.5k').groups()
大概是这样的:

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

你能提供一些示例输入吗?@AshwiniChaudhary他提供了。不处理
€1.8k
案例。@Mark Thank,添加了一个修复程序,虽然也不完美,但可能已经足够了。
[]
中的
是不正确的。这两种方法都可以单独使用:
[MKkm]
M | K | K | M
。现在只需添加
,这将是完美的。
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')]]