Regex- grab between: 右边界未转义

Regex- grab between: right boundary not escaped

我想从一系列 R .Rd 文件中提取信息。我想要示例(虽然这可以是任何 tex 标签)并且想要在左 tex 标签和右大括号之间提取。我还想抓住以某种方式转义的闭合花括号([}]\},或者我没有考虑过的任何方式)。

所以这里我有一个示例和我尝试提取但它只捕获到第一个转义花括号:

## fake tex
x <- "Here we go \example{ x <- 6\ngsub(\"\}\", \"\", x, perl=TRUE)\ngsub(\"[}]\", \"\", x, perl=TRUE)\n}\n\end{here}"

## regex to extract
regmatches(x, gregexpr("(?<=\\example\{)([^}]*)(?=\})", x, perl = TRUE))

当前输出

[[1]]
[1] " x <- 6\ngsub(\"\"

期望输出

" x <- 6\ngsub(\"\}\", \"\", x, perl=TRUE)\ngsub(\"[}]\", \"\", x, perl=TRUE)\n"

一种方法是先去掉转义的花括号,然后将它们放回末尾:

x <- gsub("\\}","[=10=]1",x)
x <- gsub("\[}\]","[=10=]2",x)
match <- regmatches(x, gregexpr("(?<=\\example\{)([^}]*)(?=\})", x, perl = TRUE))
match <- gsub("[=10=]1","\\}",match)
match <- gsub("[=10=]2","[}]",match)

这给出了

> match
[1] " x <- 6\ngsub(\"\}\", \"\", x, perl=TRUE)\ngsub(\"[}]\", \"\", x, perl=TRUE)\n"

下面给出了所需的输出,至少在你给出的例子中是这样:

> gsub(".+example\{(.+)}.+","\1",x)
[1] " x <- 6\ngsub(\"\}\", \"\", x, perl=TRUE)\ngsub(\"[}]\", \"\", x, perl=TRUE)\n"