Как найти значение валюты в строке? - PullRequest
3 голосов
/ 01 февраля 2011

Я пишу небольшой инструмент для извлечения набора значений из строки (обычно это твит).

Строка может состоять из слов и цифр вместе с суммой, начинающейся с символа валюты (£, $, € и т. Д.) И несколько хэштегов (#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 находит хэштеги в порядке, но я не могу получить curex для извлечения суммы, которую я получаю в настоящее время: Сумма: £ 6.50 #projectfoo # clientmeeting.

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

Ответы [ 2 ]

15 голосов
/ 01 февраля 2011
>>> re.search(ur'([£$€])(\d+(?:\.\d{2})?)', s).groups()
(u'\xa3', u'6.50')
  • [£$€] соответствует одному символу валюты
  • \d+(?:\.\d{2}) соответствует одной или нескольким цифрам, за которыми следует дополнительный десятичный знак, за которым следуют ровно две цифры
  • () захватывает символ и сумму отдельно

Проблема с вашим регулярным выражением в том, что .* соответствует чему-либо и является жадным, поэтому в конце регулярного выражения оно соответствует всему, что следует за ним.

1 голос
/ 17 декабря 2013

Я изменил регулярное выражение Marcog немного


    re.search(ur'([£\$€])(\d+(?:\.\d{2})?)', s).groups()

, избегая знака доллара.

...