使用 str_extract_all 提取大括号之间的字符串

Extract string between curly braces using str_extract_all

我有以下代码:

myFunction.R

myFunction({
  lorem <- "ipsum"
  ...
  print("dolor sit amet")
})

myFunction({
  consectetur <- "adipiscing elit"
  ...
  sed <- paste("do", "eiusmod")
})

...

在另一个 R 脚本中,我想提取所有 myFunction 调用。现在我想到的最好的是:

library(stringr)
library(readtext)

script <- readtext('myFunction.R')[['text']]
matches <- str_extract_all(script, 'myFunction(.|\n)*\}\)')[[1]]

但不幸的是,matches 包含第一个 myFunction 调用,直到文件末尾。如何改进 RegEx 以仅匹配每个 myFunction 调用?

您可以使用

str_extract_all(script, "(?ms)^myFunction\(\{.*?^\}\)$")

详情:

  • (?ms) - 打开多行(m,使 ^$ 分别匹配行的开始和结束)和 dotall(s,使 . 也匹配默认不匹配的换行符) modes
  • ^ - 行首
  • myFunction\(\{ - 文字 myFunction({ 文本
  • .*? - 任意零个或多个字符,尽可能少
  • ^ - 行首
  • \}\) - 文字 }) 文本
  • $ - 一行结束。