r - 如何使用 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 之后的右引号和括号\")
(我也想删除这个 for YVAR
)
Time1
和YVAR
(x 和 y 变量名称) 是任意的,可以在结果字符串中命名任何内容,但是,需要保留的任意字符串之后的字符!!rlang::sym(\"
和右引号和括号是恒定的,不会改变。\")
我知道我可以简单地使用
result <- gsub("!!rlang::sym(\"", "", string, fixed = TRUE)
然后
result <- gsub("\")", "", result, fixed = TRUE)
但是,为了获得其中的一部分,我想找到一个更优雅的正则表达式解决方案,它可以结合这两个 gsub 并且当然也不会删除"\")"
关闭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)
请注意,您的示例string
,中有两个右括号!!rlang::sym(\"YVAR\"))
,它们稍微阻碍了模式。如果那是真实的,那么......要么寻找重复"\\)+
或......其他东西。
推荐阅读
- vue.js - 组件中的 Nuxt 内容异步获取
- laravel - 如何在 laravel 的 textarea 中换行,然后通过 foreach 循环回显?
- python - 在 Python 数据框列中滑动子字符串的窗口
- istio - Istio 授权 - Istio 'paths' 字段中的模式匹配
- azure-devops - 限制用户在 Azure DevOps 上创建查询
- python - ValueError:检查输入时出错:预期 input_13 有 3 个维度,但得到了形状为 (50000, 32, 32, 3) 的数组
- multithreading - 使用 PyTorch 并行运行多个推理
- http - OpenID Connect 会话状态集成
- ios - react-native-webview scalesPageToFit - ios
- vba - base64 字符串到 XML 的性能问题