Вы можете использовать разделение строк вместо сопоставления с регулярными выражениями - например, разделить в },
, удалить []{
, разделить в ,
, разделить в :\\s
, удалить ^[\\'\\"]
и [\\'\\"]$
(или просто удалить первый и последний символ строковых значений, так как это будут кавычки тот или иной вид).
Вот tidyverse
версия, но есть и другие способы ...
library(tidyverse) #uses dplyr and stringr
x <- "[{'name': 'Mae Tech', 'id': 102}, {'name': \"Walters' Company\", 'id': 98},
{'name': 'Brad & Bouy Inc.', 'id': 678}, {'name': 'Dowi Enterprises', 'id': 7678},
{'name': 'Gamer Boys', 'id': 7678}, {'name': 'LogoMan', 'id': 3456}]"
str_split(x, "\\},")[[1]] %>% #split at "},"
str_remove_all("[\\[\\]\\{\\}]") %>% #remove assorted brackets "{}[]"
str_split_fixed(", ", 2) %>% #split at ", "
as.data.frame(stringsAsFactors = FALSE) %>% #convert to dataframe
set_names(c("name", "id")) %>% #set column names
mutate_all( ~ str_trim(str_remove(., ".+:\\s+"))) %>% #remove bit up to ": " and trim
mutate(name = substr(name, 2, nchar(name) - 1)) #remove end quotes from name
name id
1 Mae Tech 102
2 Walters' Company 98
3 Brad & Bouy Inc. 678
4 Dowi Enterprises 7678
5 Gamer Boys 7678
6 LogoMan 3456