2016-05-15 2 views
-6

Как написать код R для извлечения всех чисел, относящихся к деньгам или процентам, с использованием регулярных выражений в приведенном ниже предложении. Код R должен подбирать такие вещи, как: 39.7 percent, и долларовые значения, такие как $873,599 и $1 million.Регулярное выражение с использованием R

Мой образец текста:

В то время как выбор во всех ценовых сегментах был низким, интерес к топовым домов оставались высокими и 355 свойств, или 37,6 процента от всех проданных домов, привлекаемые цену сверх $ 873599 и $ 1 миллион».

Я попытался следующие $?[0-9,.]+Percent?Million?, но это не работает, как ожидалось.

+4

Пожалуйста, укажите код R для лучшей попытке в минимальном самодостаточного воспроизводимым способом. См. [Mcve] для получения дополнительной информации о том, как задать вопрос. –

+1

Я вижу, что вы новый плакат. Причина, по которой это получилось, - это то, что вы не предоставили никаких данных, никакого кода, и возникает вопрос, как вы думаете о StackOverflow (SO) как службе написания кода. Вы можете увидеть эти рекомендации SO [ЗДЕСЬ] (http://stackoverflow.com/help/mcve). Это также звучит, как чтение через регулярное руководство может быть полезно. Я нашел [ЭТО] (http://www.rexegg.com/) один, чтобы быть полезным, когда я учился. Вы можете повторно изменить свой вопрос, если к тому времени он не был закрыт, чтобы соответствовать ожиданиям StackOverflow. –

ответ

3

Описание

[0-9]+(?:\.[0-9]+)?\s*(?:%|percent)|\$(?:[0-9]{3},)*[0-9]+(?:\s(?:thousand|million|billion|trillion))?

Regular expression visualization

Это регулярное выражение будет делать следующее:

  • найти все числа, которые представляют собой проценты, с или без десятичной точки
    • число может последовать по знаку % или буквальное слово
  • найти все числа, доллар составляет
    • с ведущим знаком доллара
    • может включать в себя запятая
    • может сопровождаться словом, как тысяча, миллион, миллиард или триллион
  • остерегайтесь других не доллар или процент числа

Примеры

Демо

https://regex101.com/r/uG6mQ4/1

Образец текста

«В то время как выбор по 100% ценовых сегментов был низким, интерес к топовым домов оставались высокими и 355 свойств, или 37,6% всех проданных домов привлекли более $ 873,599 и $ 1 млн. ".

Образец Матчи

[0][0] = 100% 
[1][0] = 37.6 percent 
[2][0] = $873,599 
[3][0] = $1 million 

Объяснение

NODE      EXPLANATION 
---------------------------------------------------------------------- 
    [0-9]+     any character of: '0' to '9' (1 or more 
          times (matching the most amount possible)) 
---------------------------------------------------------------------- 
    (?:      group, but do not capture (optional 
          (matching the most amount possible)): 
---------------------------------------------------------------------- 
    \.      '.' 
---------------------------------------------------------------------- 
    [0-9]+     any character of: '0' to '9' (1 or more 
          times (matching the most amount 
          possible)) 
---------------------------------------------------------------------- 
)?      end of grouping 
---------------------------------------------------------------------- 
    \s*      whitespace (\n, \r, \t, \f, and " ") (0 or 
          more times (matching the most amount 
          possible)) 
---------------------------------------------------------------------- 
    (?:      group, but do not capture: 
---------------------------------------------------------------------- 
    %      '%' 
---------------------------------------------------------------------- 
    |      OR 
---------------------------------------------------------------------- 
    percent     'percent' 
---------------------------------------------------------------------- 
)      end of grouping 
---------------------------------------------------------------------- 
|      OR 
---------------------------------------------------------------------- 
    \$      '$' 
---------------------------------------------------------------------- 
    (?:      group, but do not capture (0 or more times 
          (matching the most amount possible)): 
---------------------------------------------------------------------- 
    [0-9]{3}     any character of: '0' to '9' (3 times) 
---------------------------------------------------------------------- 
    ,      ',' 
---------------------------------------------------------------------- 
)*      end of grouping 
---------------------------------------------------------------------- 
    [0-9]+     any character of: '0' to '9' (1 or more 
          times (matching the most amount possible)) 
---------------------------------------------------------------------- 
    (?:      group, but do not capture (optional 
          (matching the most amount possible)): 
---------------------------------------------------------------------- 
    \s      whitespace (\n, \r, \t, \f, and " ") 
---------------------------------------------------------------------- 
    (?:      group, but do not capture: 
---------------------------------------------------------------------- 
     thousand     'thousand' 
---------------------------------------------------------------------- 
    |      OR 
---------------------------------------------------------------------- 
     million     'million' 
---------------------------------------------------------------------- 
    |      OR 
---------------------------------------------------------------------- 
     billion     'billion' 
---------------------------------------------------------------------- 
    |      OR 
---------------------------------------------------------------------- 
     trillion     'trillion' 
---------------------------------------------------------------------- 
    )      end of grouping 
---------------------------------------------------------------------- 
)?      end of grouping 
----------------------------------------------------------------------