2015-03-27 7 views
1

Я пишу код на Python, где мне требуется извлечь символ валюты из цены. Итак,Извлечь символ валюты из цены в Python

cost = $56.78 

Мне нужно получить только «$».

На этих форумах я нашел, как извлечь номер, но не символ валюты. Я новичок в регулярных выражениях, поэтому был бы благодарен за помощь.

Это может быть любая валюта, не только доллар, но я полагаю, что это будет первым символом в строке ..

+2

Если это всего лишь первый символ acter строки: 'cost [0]'. Однако IIRC не все валюты делают это. –

+0

Вы также можете искать поток нечисловых символов. – rayryeng

ответ

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' 
+0

Очень приятно. Мне нравится, как вы его обобщаете. – rayryeng

+0

op запрашивает символ валюты. Я думаю, что 'USD' не является символом. –

+0

Спасибо! Отличный ответ. – user3033194

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] 
'$' 
0

Предполагая, что стоимость является строкой, я хотел бы сделать следующее:

cost = '$56.78'; 

currency = cost[:1] 

print(currency) 

Просто возьмите первое значение в строке затрат и у вас будет ваша валюта.

Вы также можете сделать:

currency = cost[0] 
3

Реальная картина, чтобы соответствовать все символы валюты является \p{Sc}. Но это регулярное выражение не будет поддерживаться модулем re по умолчанию python. Но внешний модуль 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' 

ИЛИ

Держите его просто.

>>> 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' 
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 

Demo

>>> 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') 
'$' 
+0

Это не работает в python 3.6 –

Смежные вопросы