使用 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({
文本
.*?
- 任意零个或多个字符,尽可能少
^
- 行首
\}\)
- 文字 })
文本
$
- 一行结束。
我有以下代码:
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({
文本.*?
- 任意零个或多个字符,尽可能少^
- 行首\}\)
- 文字})
文本$
- 一行结束。