Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中从价格中提取货币符号_Python - Fatal编程技术网

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

在Python中从价格中提取货币符号,python,Python,我正在用Python编写一些代码,需要从价格中提取货币符号。所以 cost = $56.78 我只需要得到“$”就行了 在这些论坛上,我发现了如何提取数字,而不是货币符号。我是新加入regexes的,因此非常感谢您的帮助 它可以是任何货币,不仅仅是美元,但我想它应该是字符串中的第一个字符。如果成本='$56.78'您只需执行成本[0]即可获得“字符串的第一个字符”: >>cost=$56.78#如果cost='$56.78'您只需执行cost[0]即可获得“字符串的第一个字符”: >>成本=$

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

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欧元