【问题标题】:Extract argument of function from string with R用R从字符串中提取函数的参数
【发布时间】:2021-11-23 08:55:44
【问题描述】:

最好使用stringr 包,我想创建一个函数extract(),它以字符串向量为参数

vec <- c(
"div(span(icon(\"hospital-user\"), i18n$t(\"Enrolments\"), \"or\", i18n$t(\"Paper\"))),",
"a string with no matching pattern",
"Lala i18n$t(\"Rock\")"
)

并返回i18n$t(\""\)内的所有元素。

在上面的示例中,extract(vec) 将返回 "Enrolments""Paper""Rock"

【问题讨论】:

  • 有些人投票认为问题“需要更多关注 - 如果您的问题有很多有效答案(但无法确定哪个 - 如果有的话 - 是正确的),那么它可能需要更加关注在我们的格式中取得成功。这个问题目前包括多个问题。它应该只关注一个问题。我不明白为什么。
  • 他们的意思可能是“需要细节或清晰”,因为您实际上并没有提出任何问题,也没有表现出自己解决这个问题的任何努力。

标签: r regex tidyverse


【解决方案1】:

我们可以使用正则表达式环视来提取n$t(" 后面的单词 (\\w+)。 $ 是元字符,所以只需转义 (\\) 即可

library(stringr)
str_extract_all(vec, '(?<=n\\$t\\(")\\w+')[[1]]
[1] "Enrolments" "Paper"      "Rock"  

如果有多个元素,请使用unlist

unlist(str_extract_all(vec, '(?<=n\\$t\\(")\\w+'))

【讨论】:

  • 完美,只需取消列出即可获得解决方案:str_extract_all(vec, '(?&lt;=n\\$t\\(")\\w+') |&gt; unlist()
  • 由于是单个列表元素,可以直接用[[1]]提取
  • 我有&gt; str_extract_all(vec, '(?&lt;=n\\$t\\(")\\w+')[[1]] "Enrolments" "Paper" 没有Rock
  • @tic-toc-choc 我将"div(span(icon(\"hospital-user\"), i18n$t(\"Enrolments\"), \"or\", i18n$t(\"Paper\"))),\",\n\"a string with no matching pattern\"\n\"Lala i18n$t(\"Rock\")" 用作vec
  • 可能是因为你可能有 2 个元素而不是我用作 vec 的单个元素
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-13
相关资源
最近更新 更多