我有以下代码:
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
,使.
也匹配默认不匹配的换行符)模式^
-行起始myFunction\(\{
-文字myFunction({
文本.*?
-任何零或更多字符,尽可能少^
-行起始})
-文字})
文本$
-行尾