我想gsub
一个字,但只是没有用括号括起来的情况。
x <- c("hello","[hello]")
我希望gsub(regex,"test",x)
返回c("test","[hello]")
,但我无法创建正确的正则表达式语句。
一个天真的实现是:gsub("^(?!\\[).*$","test",x, perl=TRUE)
,它适用于上述情况,但只是因为每个字符串都是一个单词,所以它不适用于x <- "hello [hello]"
,例如,我希望它是test [hello]
。
我尝试过一堆不同的前瞻无济于事。任何帮助将不胜感激。
输入
x <- c("hello", "[hello]", "hello [hello]")
所需
# [1] "test" "[hello]" "test [hello]"
答案 0 :(得分:1)
您可以使用否定环视来设置字边界的约束,例如(?<!\\[)\\b\\w+\\b(?!\\])
仅在字边界不是[]
时才会替换字:
gsub("(?<!\\[)\\b\\w+\\b(?!\\])", "test", x, perl = TRUE)
# [1] "test [hello]" # assuming this is your desired output
\\b\\w+\\b
会查找一个单词,但带有负面后瞻?<!
和否定前瞻?!
,单词边界不应为[]
。您还可以参考this answer。
答案 1 :(得分:1)
我们可以使用grep
x[grep("^[^[]+$", x)] <- "test"
x
#[1] "test" "[hello]"
或sub
sub("^[^[]+", "test", x)
#[1] "test" "[hello]"
对于第二种情况
sub("^\\b[^[+]+\\b", "test", x1)
#[1] "test [hello]"
x <- c("hello","[hello]")
x1 <- "hello [hello]"