2015-12-23 3 views
0

Я пытаюсь воссоздать старый проект. Тем не менее, я предполагаю, что что-то изменилось в пакете stringr, потому что мой код больше не работает. Минимальный рабочий пример (MWE): сообщениеR Regex with Stringr: character (0) Ошибка

library(httr) 
library(stringr) 
library(XML) 
url <- "http://www.lq.com/en/findandbook.html" 
page <- GET(url) 
s <- content(page, as="text") 
push <- unlist(str_match_all(s, "hotelList.push?.+?}")) # stopped working 

Ошибка:

> push <- unlist(str_match_all(s, "hotelList.push?.+?}")) # stopped working 
Error in stri_match_all_regex(string, pattern, cg_missing = "", omit_no_match = TRUE, : 
Syntax error in regexp pattern. (U_REGEX_RULE_SYNTAX) 

Мой фикс:

> push <- unlist(str_match_all(s, "hotelList.push?.+?\\}")) # stopped working 
> push 
character(0) 

Строка, s, имеет строки текста. Я пытаюсь найти линии, которые выглядят так:

"hotelList.push({title: \"La Quinta Inn & Suites Phoenix I-10 West\", innNumber: \"0853\", latitude:})" 

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

str_match_all(s, "/{(.*?)}/") 
str_match_all(s, "/{([^}]*)}/") 

Любые советы приветствуются.

ответ

0

Снимите косую черту и выйдите из фигурных скобок.

str_match_all(s, "\\{([^}]*)\\}") 

или

str_match_all(s, "\\{\\K[^}]*(?=\\})") 
+0

Очень полезно. Как захватить строки с шаблоном: 'hotelList.push ({......})' хотя? – user2205916

+0

используйте этот '' hotelList \\. Push \\ (\\ {. *? \\} \\) "' –

+0

Это не сработало, но это произошло: 'str_match_all (s," hotelList \\. Push \ \ (\\ {([^}] *) \\} "))'. Большое спасибо @ avinish-raj – user2205916