r - 如何使用 gsub 删除字符串中任意字符之前和之后的特定字符

标签 r regex gsub

我正在尝试使用 gsub 从以下字符串中删除字符:

string <- "function(data, x = !!rlang::sym(\"Time1\"), y = !!rlang::sym(\"YVAR\")), values = c(\"a\", \"b\"))"

新字符串应返回:

cat(string)
function(data, x = Time1, y = YVAR, values = c("a", "b"))

也就是说,我想删除!!rlang::sym(\",保留Time1,并删除Time1后面的右引号和括号\") (我还想为 YVAR 删除它)

Time1YVAR (x 和 y 变量名称)是任意的,可以在结果字符串中命名为任何名称,但是字符 !!rlang: :sym(\"以及需要保留的任意字符串后面的右引号和括号\")是不变的,不会改变。

我明白我可以简单地使用

result <- gsub("!!rlang::sym(\"", "", string, fixed = TRUE)

然后

 result <- gsub("\")", "", result, fixed = TRUE)

但是,为了实现这一目标,我想找到一个更优雅的正则表达式解决方案,可以将这两个 gsub 结合起来,当然也不会删除结束的 "\")" in values = c(\"a\",\"b\"))"

最佳答案

如果它始终是文字!!rlang::sym(",那么这个

cat( gsub('!!rlang::sym\\("(\\S+)"\\)', "\\1", string), "\n" )
# function(data, x = Time1, y = YVAR), values = c("a", "b")) 

如果它是函数调用/paren/quote,那么它可以概括一点。我认为您需要一些特殊性,否则您会解析出比您想要的更多的内容。我假设需要 rlang:

gsub('\\S+rlang\\S+\\("(\\S+)"\\)', "\\1", string)

请注意,示例字符串中有两个右括号,!!rlang::sym(\"YVAR\")),它们阻碍了模式只是一点点。如果这是真的,那么...要么使用 "\\)+ 查找重复项,要么...其他内容。

关于r - 如何使用 gsub 删除字符串中任意字符之前和之后的特定字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65742836/

相关文章:

javascript 正则表达式从小写字母中拆分大写字母

带有 or 和 re.search 的 Python 正则表达式

ruby-on-rails - 使用 gsub 和数组的 Ruby/Rails

string - 在 R 中,如何用另一个字符串替换包含特定模式的字符串?

R 字符和日期类型比较

r - 如何在R中根据之前的列删除特定值

c# - string.split 但保持顺序匹配

Ruby gsub 在设置内容时不会更改内容

在 R 中读取带有两行标题的 excel

r - 分配给变量 _AND_ 保持属性