Удаление шаблона с помощью gsub в r
У меня есть строка Project Change Request (PCR) - HONDA DIGITAL PLATEFORM
, сохраненная в supp_matches
, и supp_matches1
содержит строку Project Change Request (PCR) -
.
supp_matches2 <- gsub("^.*[supp_matches1]","",supp_matches)
supp_matches2
# [1] " (PCR) - HONDA DIGITAL PLATEFORM"
Что на самом деле не правильно, но это должно быть похоже на
supp_matches2
# [1] "HONDA DIGITAL PLATEFORM"
Почему все идет не так, как должно быть?2 ответа:
Как я уже сказал в своем комментарии, в вашем выражении
gsub("^.*[supp_matches1]", "", supp_matches)
вы на самом деле используете не объектsupp_matches1
, а только буквы внутри него.Вы можете сделать что-то вроде
gsub(paste0("^.*", supp_matches1), "", supp_matches)
, чтобы действительно использовать выражение, содержащееся вsupp_matches1
, за исключением того, что, как упоминалось в @rawr, у вас есть скобки в выражении, поэтому вам нужно будет их удалить.
Правильное выражение, чтобы получить то, что вы хотите, было бы тогдаsub("Project Change Request \\(PCR\\) - ", "", supp_matches)
Чтобы получить то, что вы хотите, вы можете использовать параметр
fixed
gsub
(sub
) функция, которая говорит, что выражение в параметреpattern
будет соответствовать так, как оно есть (таким образом, без необходимости экранировать что-либо, но и без реального регулярного выражения).Итак, то, что вы ищете, это:
gsub(supp_matches1, "", supp_matches, fixed=TRUE) # or just with `sub` in this case #[1] "HONDA DIGITAL PLATEFORM"
Уже @cathG предоставил ответ с фиксированным=TRUE. Если вы хотите сделать все с регулярным выражением, то вы можете попробовать это.
> w1 <- "Project Change Request (PCR) - HONDA DIGITAL PLATEFORM" > w2 <- "Project Change Request (PCR) - " > sub(paste0("^", gsub("(\\W)", "\\\\\\1", w2)), "", w1) [1] "HONDA DIGITAL PLATEFORM"
Это просто своего рода экранирование всех специальных символов, присутствующих внутри переменной, которую вы хотите использовать в качестве первого параметра в подфункции.