我有很多字符串指的是货币价值,例如$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'
有什么想法吗?
答案 0 :(得分: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()
答案 1 :(得分: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')]]