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

Python 如何在字符串中找到货币值?,python,regex,currency,Python,Regex,Currency,我正在编写一个小工具,从字符串(通常是tweet)中提取一组值 该字符串可以由单词和数字以及以货币符号(£、$、欧元等)为前缀的金额和一些哈希标记(#foo#bar)组成。我在appEngine上运行,并使用tweepy来引入推文 我必须找到的当前代码值如下: tagex = re.compile(r'#.*') curex = re.compile(ur'[£].*') for x in api.user_timeline(since_id = t.lastimport):

我正在编写一个小工具,从字符串(通常是tweet)中提取一组值

该字符串可以由单词和数字以及以货币符号(£、$、欧元等)为前缀的金额和一些哈希标记(#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是例如“出租车伦敦6.50英镑#projectfoo#clientmeeting”

tagex发现hashtags很好,但我无法让curex提取我当前获得的金额: 金额:6.50英镑(projectfoo)客户会议

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

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

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

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

re.search(ur'([£\$€])(\d+(?:\.\d{2})?)', s).groups() 检索(ur'([\$€])(\d+(?:\。\d{2})),s.groups()
通过避开美元符号。

太棒了,谢谢:-)我还发现我需要在我的文件顶部添加#——编码:utf-8——但我想这只是一个好的做法?@sam2.x需要它,但3.x默认为utf-8。我只会在需要时添加标题,就像在本例中一样。由于某种原因,这会导致语法错误,除非我删除字符串前面的
u
前缀。