Я выполняю некоторую обработку текста для анализа, но столкнулся с проблемой, когда мне нужно удалить только «\n» (непосредственно за которым следует слово) в круглых скобках. Я думаю, что пример может прояснить, что я хочу сделать:
“\nMr. Johnson (spoke in \nRussian) (United Kingdom and \nNortheren Ireland) \n”
Мне нужен «\n» перед г-ном Джонсоном для другой задачи, и поэтому меня интересует только удаление \n, если оно находится внутри круглых скобок, и сохранение остального текста, чтобы получить следующий вывод:
“\nMr. Johnson (spoke in Russian) (United Kingdom and Northeren Ireland) \n”
Моя основная идея состоит в том, чтобы сделать какое-то регулярное выражение, которое может захватывать «\n» внутри круглых скобок и вместе с функцией str_replace_all() из пакета stringr удалять его. Тем не менее, я обнаружил, что это легче сказать, чем сделать, и после некоторых исследований и времени я придумал два возможных способа, которые в любом случае могут быть решением этой проблемы:
Поэтому я буду здесь, если кто-нибудь из вас, поклонников регулярных выражений, может помочь мне решить эту проблему? Я использую R и, следовательно, использую механизм регулярных выражений ICU.
Всего наилучшего Эрик





Вы можете использовать
x <- "\nMr. Johnson (spoke in \nRussian) (United Kingdom and \nNortheren Ireland) \n"
library(stringr)
str_replace_all(x, "\\([^()]*\\)", function(z) gsub("\n", "", z, fixed=TRUE) )
# => [1] "\nMr. Johnson (spoke in Russian) (United Kingdom and Northeren Ireland) \n"
Здесь \([^()]*\) соответствует подстроке между ( и ) без ( и ) между ними, а function(z) gsub("\n", "", z, fixed=TRUE) удаляет все символы перевода строки из каждого непересекающегося совпадения.
Также возможен базовый подход R:
x <- "\nMr. Johnson (spoke in \nRussian) (United Kingdom and \nNortheren Ireland) \n"
gr <- gregexpr("\\([^()]*\\)", x)
mat <- regmatches(x, gr)
regmatches(x, gr) <- lapply(mat, function(z) sub("\n", "", z, fixed=TRUE))
x
# => [1] "\nMr. Johnson (spoke in Russian) (United Kingdom and Northeren Ireland) \n"
Посмотрите эту демонстрацию R онлайн.
Привет Виктор! Буду очень благодарна за развернутый ответ!!! Всего наилучшего Эрик :-D