Регулярные выражения в R: str_extract_all - PullRequest
0 голосов
/ 06 июня 2018

Мне нужна помощь с регулярными выражениями в R.

library(stringr)
text <- "Detailed Description, {type:status-update,activityText:Closed,date:2018-06-01T12:00:15+0200,status:Closed}, {type:status-update,activityText:Inprogress,date:2018-06-01T12:00:15+0200,status:Inprogress}, Responsible:ABC"

str_extract_all(text, "status-update.a")

Результат:

[[1]]
[1] "status-update,a" "status-update,a"

Таким же образом я набираю следующий код

str_extract_all(text, "status-update[[:print:]]+}")

Чтобы получить следующее: это означает, что мой ожидаемый результат следующий:

[[1]]
[1] "type:status-update,activityText:Closed,date:2018-06- 
01T12:00:15+0200,status:Closed" "type:status- 
update,activityText:Inprogress,date:2018-06- 
01T12:00:15+0200,status:Inprogress"

просто я хочу извлечь биты, которые находятся в фигурных скобках, но я получаю ошибку ниже:

Error in stri_extract_all_regex(string, pattern, simplify = simplify,  : 
Syntax error in regexp pattern. (U_REGEX_RULE_SYNTAX)

1 Ответ

0 голосов
/ 06 июня 2018

Вьющиеся скобки являются частью синтаксиса регулярного экспресса, поэтому, если вы хотите извлечь их, поместите перед ними escape-символ.

str_extract_all(text, "\\{.+?\\}")
#[[1]]
#[1] "{type:status-update,activityText:Closed,date:2018-06-01T12:00:15+0200,status:Closed}"        
#[2] "{type:status-update,activityText:Inprogress,date:2018-06-01T12:00:15+0200,status:Inprogress}"

Чтобы захватить только текст внутри {}, нужно использоватьрегулярное выражение оглянуться и посмотреть варианты головы.

 str_extract_all(text, "(?<=(\\{)).+?(?=\\})")

Что означает шаблон:

(?<=   ) Look behind this match
\\{  look for the left curly bracket   
 .+   with at least 1 character (any character)      
 ?    do not perform a greedy match (without it will grab everything)    
\\}  to the right curly bracket
(?=   ) look head of match
...