В R я пытаюсь написать код, который будет работать с любыми адаптациями строкового шаблона. Пример строки:
string <- "y ~ 1 + a + (b | c) + (d^2) + e + (1 | f) + g"
Я хотел бы удалить ТОЛЬКО те части, которые содержат шаблон «(, |,)», например:
(b | c) и (1 | f)
и оставить с:
"y ~ 1 + a + (d^2) + e + g"
Обратите внимание, что символы могут изменять значения (например, 'b' может становиться '1' и 'c 'может стать' предсказателем '), и я бы хотел, чтобы код по-прежнему работал. Пробелы также не требуются для строки, это также может быть «y ~ 1 + a + (b | c) + (d ^ 2) + e + (1 | f) + g» или любая комбинация пробела / no- пространство оного. Порядок символов также может измениться на «y ~ 1 + a + (b | c) + e + (1 | f) + (d ^ 2) + g».
Я пробовал использование базовых функций обработки строк R (gsub и sub) для поиска шаблона "(, |,)" с использованием вариантов шаблона, таких как:
"\\(.*\\|.*\\)"
"\\(.*\\|"
"\\(.+\\|.+\\)"
"\\|.+\\)"
, а также многих функций stringr найти и заменить этот узор на пробел. Однако, когда я использую как базовый R, так и stringr, когда я это делаю, он удаляет ВСЕ, например:
gsub("\\(.*\\|.*\\)", "", string)
дает:
"y ~ 1 + a + + g"
и
gsub("\\(.*\\|", "", string)
производит:
"y ~ 1 + a + f) + g"
Я дополнительно пробовал использовать функции str_locate, но у меня возникли проблемы с их эффективным использованием, так как существует несколько наборов круглых скобок, и мне нужны только местоположения экземпляров с "| " между ними.
Любая помощь приветствуется.