如何查找字符串中的货币值?

问题描述 投票:0回答:3

我正在编写一个小工具来从字符串(通常是一条推文)中提取一堆值。

该字符串可以由单词和数字以及以货币符号(£、$、€ 等)为前缀的金额和多个主题标签 (#foo #bar) 组成。我在 appEngine 上运行并使用 tweepy 引入推文。

我必须找到值的当前代码如下:

tagex = re.compile(r'#.*')
curex = re.compile(ur'[£].*')
for x in api.user_timeline(since_id = t.lastimport):
          tags = re.findall(tagex, x.text)
          amount = re.findall(curex, x.text)[0]
          logging.info("Text: " + x.text)
          logging.info("Tags: " + str(tags))
          logging.info("Amount: " + amount)

其中 x.text 是例如“Taxi London £6.50 #projectfoo #clientmeeting”

tagex 发现主题标签很好,但我无法让 curex 提取当前我得到的金额: 金额:6.50 英镑#projectfoo #clientmeeting。

我还需要分离货币符号,以便获得浮动金额,但这应该很简单。

python regex currency
3个回答
17
投票
>>> re.search(ur'([£$€])(\d+(?:\.\d{2})?)', s).groups()
(u'\xa3', u'6.50')
  • [£$€]
    匹配一种货币符号
  • \d+(?:\.\d{2})
    匹配一位或多位数字,后跟一个可选的小数点,后跟两位数字
  • ()
    分别捕获符号和金额

你的正则表达式的问题是

.*
匹配任何东西并且是贪婪的,所以在正则表达式的末尾它匹配后面的所有内容。


2
投票

我对Marcog的正则表达式做了一些修改


    re.search(ur'([£\$€])(\d+(?:\.\d{2})?)', s).groups()

通过转义美元符号。


0
投票

如果您同意安装额外的软件包,那么您可以尝试以下操作:

安装包

python -m pip install price-parser

获取货币和金额的代码

from price_parser import Price
result = Price.fromstring("Taxi London £6.50 #projectfoo #clientmeeting")
print(result)

输出:

Price(amount=Decimal('6.50'), currency='£')
© www.soinside.com 2019 - 2024. All rights reserved.