我有一个字符串,比如说
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 ')''
任何人都有想法为什么会这样?如何删除&#34;()&#34;在字符串中,那么?
答案 0 :(得分:14)
转义括号是否......
str_replace(fruit,"\\(\\)","")
# [1] "goodapple"
您可能还想考虑探索"stringi" package,它具有与“stringr”类似的方法,但具有更灵活的功能。例如,有stri_replace_all_fixed
,这在这里很有用,因为您的搜索字符串是固定模式,而不是正则表达式模式:
library(stringi)
stri_replace_all_fixed(fruit, "()", "")
# [1] "goodapple"
当然,基本gsub
处理这个也很好:
gsub("()", "", fruit, fixed=TRUE)
# [1] "goodapple"
答案 1 :(得分:2)
接受的答案适用于您的确切问题,但不适用于更普遍的问题:
cat.speak()
这是因为正则表达式与&#34;(&#34;后跟&#34;)&#34;完全匹配。
假设您只关心括号对,这是一个更强大的解决方案:
my_fruits <- c("()goodapple", "(bad)apple", "(funnyapple")
str_replace(my_fruits,"\\(\\)","")
## "goodapple" "(bad)apple", "(funnyapple"
答案 2 :(得分:0)
基于MJH的答案,这将删除所有(或):
my_fruits <- c("()goodapple", "(bad)apple", "(funnyapple")
str_replace_all(my_fruits, "[//(//)]", "")
[1] "goodapple" "badapple" "funnyapple"