R 如何使用gsub删除字符串中任意字符前后的特定字符
我正在尝试使用gsub从以下字符串中删除字符:R 如何使用gsub删除字符串中任意字符前后的特定字符,r,regex,gsub,R,Regex,Gsub,我正在尝试使用gsub从以下字符串中删除字符: string <- "function(data, x = !!rlang::sym(\"Time1\"), y = !!rlang::sym(\"YVAR\")), values = c(\"a\", \"b\"))" 也就是说,我想删除!!rlang::sym(\“,保留Time1,并删除Time1\”后的结束引号和括号)(我还想删除YV
string <- "function(data, x = !!rlang::sym(\"Time1\"), y = !!rlang::sym(\"YVAR\")), values = c(\"a\", \"b\"))"
也就是说,我想删除!!rlang::sym(\“
,保留Time1
,并删除Time1\”后的结束引号和括号)
(我还想删除YVAR
的此项)
Time1
和YVAR
(x和y变量名)是任意的,可以在结果字符串中命名任何内容,但是,字符!!需要保留的任意字符串后面的rlang::sym(\“
和结束引号和括号\”)
是常量,不会更改
我明白我可以简单地使用
result <- gsub("!!rlang::sym(\"", "", string, fixed = TRUE)
result如果它始终是文本!!rlang::sym(“
),那么这个
cat(gsub('!!rlang::sym\\(“(\\S+”\\)”,“\\1”,字符串),“\n”)
#函数(数据,x=Time1,y=YVAR),值=c(“a”,“b”))
如果它是一个函数调用/paren/quote,那么它可以被概括一点。我认为您需要一些特殊性,因为否则您将解析出比您想要的多得多的内容。我假设需要rlang
:
gsub('\\S+rlang\\S+\\(“(\\S+)”\\),“\\1”,字符串)
请注意,在您的示例字符串,!!rlang::sym(\“YVAR\”)
中有两个正确的参数,它们稍微阻碍了模式。如果这是真的,那么…请使用“\\)+
或。。。另外。您可以使用一个模式和一个捕获组,该捕获组将匹配除“
以外的任何字符,并在替换中使用组1
!!rlang::sym\("([^"]+)"\)
使用
result使用gsub('!!rlang::sym\\(“(.*?”\\),“\\1”,result)
result <- gsub("\")", "", result, fixed = TRUE)
!!rlang::sym\("([^"]+)"\)
string <- "function(data, x = !!rlang::sym(\"Time1\"), y = !!rlang::sym(\"YVAR\")), values = c(\"a\", \"b\"))"
cat(gsub('!!rlang::sym\\("([^"]+)"\\)', "\\1", string))
function(data, x = Time1, y = YVAR), values = c("a", "b"))