【问题标题】:How does one find the currency value in a string?如何在字符串中找到货币值?
【发布时间】:2011-02-01 12:55:07
【问题描述】:

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

字符串可以由单词和数字以及以货币符号(£、$、€ 等)为前缀的金额和多个主题标签(#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


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

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

    【讨论】:

    • 非常感谢 :-) 还发现我需要在文件顶部添加 # -- coding: utf-8 -- 但我想这只是一个好习惯?
    • @Sam 2.x 需要它,但 3.x 默认为 utf-8。如果在这种情况下需要,我只会添加标题。
    • 由于某种原因,这给了我一个语法错误,除非我删除字符串前的 u 前缀。
    【解决方案2】:

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

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

    通过转义美元符号。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多