在Python中从价格中提取货币符号
我正在用Python编写一些代码,需要从价格中提取货币符号。所以在Python中从价格中提取货币符号,python,Python,我正在用Python编写一些代码,需要从价格中提取货币符号。所以 cost = $56.78 我只需要得到“$”就行了 在这些论坛上,我发现了如何提取数字,而不是货币符号。我是新加入regexes的,因此非常感谢您的帮助 它可以是任何货币,不仅仅是美元,但我想它应该是字符串中的第一个字符。如果成本='$56.78'您只需执行成本[0]即可获得“字符串的第一个字符”: >>cost=$56.78#如果cost='$56.78'您只需执行cost[0]即可获得“字符串的第一个字符”: >>成本=$
cost = $56.78
我只需要得到“$”就行了
在这些论坛上,我发现了如何提取数字,而不是货币符号。我是新加入regexes的,因此非常感谢您的帮助
它可以是任何货币,不仅仅是美元,但我想它应该是字符串中的第一个字符。如果
成本='$56.78'
您只需执行成本[0]
即可获得“字符串的第一个字符”:
>>cost=$56.78#如果cost='$56.78'
您只需执行cost[0]
即可获得“字符串的第一个字符”:
>>成本=$56.78#假设成本是字符串值,我将执行以下操作:
cost = '$56.78';
currency = cost[:1]
print(currency)
只需获取成本字符串中的第一个值,您就可以获得您的货币
你也可以这样做:
currency = cost[0]
假设成本是字符串值,我将执行以下操作:
cost = '$56.78';
currency = cost[:1]
print(currency)
只需获取成本字符串中的第一个值,您就可以获得您的货币
你也可以这样做:
currency = cost[0]
匹配所有货币符号的实际模式是\p{Sc}
。但是python的默认re
模块不支持这个正则表达式。但是外部模块将支持许多PCRE正则表达式
>>> cost = '$56.78'
>>> import regex
>>> regex.findall(r'\p{Sc}', cost)
['$']
或
只需通过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'
或
保持简单
>>> 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'
匹配所有货币符号的实际模式是\p{Sc}
。但是python的默认re
模块不支持这个正则表达式。但是外部模块将支持许多PCRE正则表达式
>>> cost = '$56.78'
>>> import regex
>>> regex.findall(r'\p{Sc}', cost)
['$']
或
只需通过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'
或
保持简单
>>> 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'
我能想到的最简单的方法是从字符串中去掉任何非货币符号字符
实施
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')
'$'
我能想到的最简单的方法是从字符串中去掉任何非货币符号字符
实施
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')
'$'
如果它只是字符串的第一个字符:cost[0]
。IIRC并非所有货币都会这样做。您可能还需要查找非数字字符流。如果它只是字符串的第一个字符:cost[0]
。IIRC并不是所有的货币都这么做。你可能还想寻找一个非数字字符流。非常好。我喜欢你概括它的方式。op要求的是货币符号。我认为美元不是一个符号。谢谢!完美答案。你只需要去掉结果中的空格。get_symbol(10000.00欧元)产生“欧元”。正如alexander所说,它不会处理10000.00欧元的问题。我喜欢你概括它的方式。op要求的是货币符号。我认为美元不是一个符号。谢谢!完美答案。你只需要去掉结果中的空格。get_symbol(欧元10000.00)产生“欧元”。正如alexander所说,它不会处理10000.00欧元