Регулярное выражение, удаляющее несколько скобок

#r #regex

Вопрос:

Привет, у меня есть строка, которая выглядит так string = "Tom (Marketing Assistant)/Gary (Manager)/Forty" , и я хочу удалить все части внутри скобок, чтобы результат был таким "Tom/Gary/Forty" .

Я пробовал string %>% str_remove("\(. \)") , но результат есть "Tom /Forty" , и кажется, что потому, что сопоставление регулярных выражений занимает самое первое ( и вплоть до самого последнего ) , которое я пытался визуализировать, с string %>% str_extract("\(. \)") помощью которого дает "(Marketing Assistant)/Gary (Manager)" . Я не могу задавать слишком конкретные, что находится внутри кронштейна, поскольку существует целый ряд символов в скобках (не все же), так есть ли способ закодировать его таким образом, что убирает только то, что находится внутри скобок, возможно, говорю это, чтобы остановить удаление, как только он сталкивается / , потому что это следует каждый кронштейн?

Ответ №1:

Используйте str_remove_all для удаления всех вхождений.

 stringr::str_remove_all(string, '\(.*?\)')
#[1] "Tom /Gary /Forty"
 

В базе R используйте gsub

 gsub('\(.*?\)', '', string)
 

Это удаляет все символы между открывающими и закрывающими круглыми скобками. Знак вопроса ( ? ) делает регулярное выражение не жадным, поэтому оно совпадает только до первой закрывающей скобки. Все такие случаи удаляются, так как мы используем str_remove_all / gsub .

Комментарии:

1. Да, я понял, что использование жадного сопоставления с *? поможет выполнить задачу, спасибо!

Ответ №2:

Мы также можем сделать

 library(stringr)
str_replace_all(string, "[(][^)] [)]", "")
#[1] "Tom /Gary /Forty"