在Python中从价格中提取货币符号

时间:2015-03-27 15:42:52

标签: python

我正在用Python编写一些代码,我需要从价格中提取货币符号。所以,

cost = $56.78

我需要获得' $'。

在这些论坛上,我找到了如何提取数字而不是货币符号。我是regexes的新手,所以非常感谢你的帮助。

它可以是任何货币,而不仅仅是美元,但我想这将是字符串中的第一个字符..

5 个答案:

答案 0 :(得分:4)

>>> def get_symbol(price):
        import re
        pattern =  r'(\D*)\d*\.?\d*(\D*)'
        g = re.match(pattern,price).groups()
        return g[0] or g[1]

>>> get_symbol('$12.5')
'$'
>>> get_symbol('12.5USD')
'USD'

答案 1 :(得分:4)

匹配所有货币符号的实际模式为\p{Sc}。但是python的默认re模块不支持这个正则表达式。但是外部regex模块将支持许多PCRE正则表达式。

>>> cost = '$56.78'
>>> import regex
>>> regex.findall(r'\p{Sc}', cost)
['$']

DEMO

只需通过re.sub函数用空字符串替换数字或空格。

>>> def get_symbol(price):
        return re.sub(r'\d+(?:,\d+)*(?:\.\d+)?|\s+', '', price)

>>> get_symbol('EUR 10,000.00')
'EUR'
>>> get_symbol(' $ 12.5')
'$'
>>> get_symbol('12.5 USD')
'USD'

OR

保持简单。

>>> def get_symbol(price):
        return re.sub(r'[\d,.\s]', '', price)

>>> get_symbol('EUR 10,000.00')
'EUR'
>>> get_symbol(' $ 12.5')
'$'
>>> get_symbol('12.5 USD')
'USD'

答案 2 :(得分:0)

如果cost = '$56.78'你只需要cost[0]来获取"字符串的第一个字符":

>>> cost = $56.78     #<-- you can't do this cause its not a valid string
SyntaxError: invalid syntax

>>> cost = '$56.78'   #valid string

>>> cost[0]
'$'

答案 3 :(得分:0)

假设费用是字符串值,我会执行以下操作:

cost = '$56.78';

currency = cost[:1]

print(currency)

只需获取费用字符串中的第一个值即可获得货币。

你也可以这样做:

currency = cost[0]

答案 4 :(得分:0)

我能想到的最简单的方法是从字符串中删除任何非货币符号字符

<强>实施

def get_symbol(price):
    import string
    delete_chars = dict((ord(char), None) for char in string.digits + u" ,.+-")
    price = unicode(price).translate(delete_chars)
    try:
        return price.decode('ascii').encode('ascii')
    except (UnicodeDecodeError,UnicodeEncodeError):
        return price

<强>演示

>>> print get_symbol(u' \u20B9 12.5')
₹
>>> get_symbol(u' \u20B9 12.5')
u'\u20b9'
>>> get_symbol('$12.5')
'$'
>>> get_symbol('12.5USD')
'USD'
>>> get_symbol('EUR 10,000.00')
'EUR'
>>> get_symbol(' $ 12.5')
'$'