Недавно я задал вопрос о создании сложного регулярного выражения для разбиения строки ( здесь ). Я работал с базой R, поэтому все работало нормально. Тем не менее, теперь я хочу использовать то же выражение в другой части моего кода, которая следует за «окружением» (я хочу использовать tidyr::separate_rows
), и оно не работает, потому что мой шаблон PRCE
и stringr
использует только библиотеку ICU.
Воспроизводимый пример:
vec <- c("'01'", "'01' '02'",
"#bateau", "#bateau #batiment",
"#'autres 32'", "#'autres 32' #'batiment 30'", "#'autres 32' #'batiment 30' #'contenu 31'",
"#'34'", "#'34' #'33' #'35'")
У меня есть предыдущая строка, которую мне нужно разбить везде, где есть пробел (
), за исключением случаев, когда пробел между '
. @Wiktor Stribiżew любезно ответили на мой вопрос и дали мне этот шаблон '[^']*'(*SKIP)(*F)|\\s+
, который отлично работал при вызове strsplit
:
strsplit(vec, "'[^']*'(*SKIP)(*F)|\\s+", perl=TRUE)
[[1]]
[1] "'01'"
[[2]]
[1] "'01'" "'02'"
[[3]]
[1] "#bateau"
[[4]]
[1] "#bateau" "#batiment"
[[5]]
[1] "#'autres 32'"
[[6]]
[1] "#'autres 32'" "#'batiment 30'"
[[7]]
[1] "#'autres 32'" "#'batiment 30'" "#'contenu 31'"
[[8]]
[1] "#'34'"
[[9]]
[1] "#'34'" "#'33'" "#'35'"
Однако, когда я попробовал тот же шаблон в функции Tidyverse, я получил эту ошибку :
stringr::str_split(vec, "'[^']*'(*SKIP)(*F)|\\s+")
Error in stri_split_regex(string, pattern, n = n, simplify = simplify, :
Syntax error in regexp pattern. (U_REGEX_RULE_SYNTAX)
Здесь , @Wiktor Stribiżew был достаточно любезен, чтобы объяснить проблему, потому что это выражение PCRE
, в то время как tidyverse использует ICU
Есть ли способ заставить мое выражение работать в тидиверсе? Если нет, какое выражение будет работать? Обратите внимание, что в моем примере используется strsplit
, так как проще объяснить проблему. Однако в конце я хочу использовать функцию tidyr::separate_rows
, объясняющую, почему мне нужно решение, совместимое с tidyverse.