Perl Regex для подсчета чисел R-lang

Я использую R и New для регулярного выражения: мне нужно регулярное выражение для извлечения «statuses_count» для json-подобного текста. Данные организованы в фрейм данных с текстом в каждой строке. пример строки данных:

{'lang': u'en', 'profile_background_tile': False, 'statuses_count': 4414, 'description': u'Progessive,interested in the psychology of politics.  

результат должен быть: 4414.

Я думал об использовании str_extract_all с параметром perl, но я не понимаю, как получить только число, следующее за 'statuses_count' (?‹=statuses_count.:)(что-то)

Как новичок, было бы здорово понять, как сказать «возьмите номер» после «statusescount». Спасибо!


person lmcshane    schedule 05.01.2015    source источник
comment
Я думаю, что было бы лучше использовать библиотеки RJSONIO или jsonlite.   -  person akrun    schedule 05.01.2015


Ответы (2)


Здесь я использую регулярное выражение perl согласно заголовку поста.

 library(stringr)
 str_extract_all(str1, perl("(?<=statuses_count': )\\d+"))[[1]]
#[1] "4414"

визуализировать

(?<=statuses_count': )\\d+

Визуализация регулярных выражений

Демонстрация отладки

Или используя stringi (быстрее для больших наборов данных)

 library(stringi)
  stri_extract_all_regex(str1, "(?<=statuses_count': )\\d+")[[1]]
 #[1] "4414"

данные

str1 <- "{'lang': u'en', 'profile_background_tile': False, 'statuses_count': 4414, 'description': u'Progessive,interested in the psychology of politics."
person akrun    schedule 05.01.2015

1) под. Простое решение без пакетов.

sub(".*'statuses_count': (\\d+).*", "\\1", x)
## [1] "4414"

Визуализация регулярного выражения:

.*'statuses_count': (\d+).*

Визуализация регулярных выражений

Демонстрация отладки

2) gsub Если мы знаем, что в строке нет других цифр (как в примере), это еще проще, поскольку мы можем просто удалить нецифры:

gsub("\\D", "", x)
## [1] "4414"

Визуализация регулярного выражения:

\D

Визуализация регулярных выражений

Демонстрация отладки

3) "strapply" или "straplyc" Этот подход включает в себя относительно простое регулярное выражение:

library(gsubfn)
strapplyc(x, "'statuses_count': (\\d+)", simplify = TRUE)
## [1] "4414"

или если вы хотите числовой вывод:

strapply(x, "'statuses_count': (\\d+)", as.numeric, simplify = TRUE)
## [1] 4414

Визуализация регулярного выражения:

'statuses_count': (\d+)

Визуализация регулярных выражений

Демонстрация отладки

Примечание: Ни одно из них не требует расширений регулярных выражений Perl. Обычные регулярные выражения будут работать.

person G. Grothendieck    schedule 05.01.2015