如何在字符串中找到货币值?

时间:2011-02-01 12:55:08

标签: python regex currency

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

字符串可以包含单词和数字,以及以货币符号(£,$,€等)为前缀的数量和一些主题标签(#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。

我还需要将货币符号分开,以便将金额作为浮点数来获取,但以后应该非常简单。

2 个答案:

答案 0 :(得分:15)

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

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

答案 1 :(得分:1)

我改变了Marcog的正则表达式改变了一下


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

逃避美元符号。