str_replace (package stringr)는 rackets를 r에서 대체 할 수 없습니다.
문제
문자열이 있습니다.
fruit <- "()goodapple"
.
문자열에서 브래킷을 제거하고 싶습니다.일반적으로 이러한 종류의 문제를 처리 할 수 있기 때문에 Stringr 패키지를 사용하기로 결정합니다.나는 사용한다 :
str_replace(fruit,"()","")
.
아무 것도 대체되지 않으며 다음이 대체됩니다.
[1] "()good"
.
오른쪽 절반 브래킷을 교체하고 싶다면 작동합니다 :
str_replace(fruit,")","")
[1] "(good"
.
그러나 왼쪽 절반 브래킷이 작동하지 않습니다 :
str_replace(fruit,"(","")
.
및 다음 오류가 표시됩니다.
Error in sub("(", "", "()good", fixed = FALSE, ignore.case = FALSE, perl = FALSE) :
invalid regular expression '(', reason 'Missing ')''
.
이런 이유에 대한 아이디어가 있습니까?문자열에서 "()"을 어떻게 제거 할 수 있습니까?
해결책
괄호를 벗어나는 것은 ...
str_replace(fruit,"\\(\\)","")
# [1] "goodapple"
.
library(stringi)
stri_replace_all_fixed(fruit, "()", "")
# [1] "goodapple"
.
물론 기본 gsub
는 이것을 잘 처리합니다 :
gsub("()", "", fruit, fixed=TRUE)
# [1] "goodapple"
. 다른 팁
허용 된 답변은 정확한 문제에 대해 작동하지만 더 일반적인 문제는 아닙니다 :
my_fruits <- c("()goodapple", "(bad)apple", "(funnyapple")
str_replace(my_fruits,"\\(\\)","")
## "goodapple" "(bad)apple", "(funnyapple"
.
정규식이 정확히 일치하기 때문입니다.
브래킷 쌍에 대해서만주의를 기울이면 더 강한 해결책입니다.
str_replace(my_fruits, "\\([^()]{0,}\\)", "")
## "goodapple" "apple" "(funnyapple"
. MJH의 답변을 빌드하면 모든 (또는) 다음을 제거합니다.
my_fruits <- c("()goodapple", "(bad)apple", "(funnyapple")
str_replace_all(my_fruits, "[//(//)]", "")
[1] "goodapple" "badapple" "funnyapple"
. 제휴하지 않습니다 StackOverflow