#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"