【问题标题】:Regular expression to find R code in Sweave expression在 Sweave 表达式中查找 R 代码的正则表达式
【发布时间】:2026-02-06 13:30:01
【问题描述】:
我在一些 .Rnw 文件的文本中包含一些 sweave 表达式。下面的段落包含两个 sweave 表达式。我可以使用什么正则表达式来查找每个表达式中的 R 代码。所以正则表达式应该能找到mean(mtcars$mpg)和/或summary(lm(mpg ~ hp + drat, mtcars))
Lorem ipsum dolor sit amet,consectetur adipisicing elit,sed do eiusmod tempor incididunt ut labore et dolore magna aliqua。 \Sexpr{平均(mtcars$mpg)}。 Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat。 Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur。 Exceptioneur sint occaecat cupidatat \Sexpr{summary(lm(mpg ~ hp + drat, mtcars))} 非专业,在 culpa qui officia deserunt mollit anim id est labourum 中发生。
【问题讨论】:
标签:
regex
r
latex
knitr
sweave
【解决方案1】:
正则表达式为(?<=\\Sexpr{).+?(?=})
-
(?<=\\Sexpr{) 部分是积极的向后看
-
(?=}) 是积极的前瞻
-
.+? 将懒惰地匹配上述两个环视之间的所有内容。
在此处阅读更多内容。 http://www.regular-expressions.info/lookaround.html
例如在 R 中(因为你标记了 R)
txt <- 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. \\Sexpr{mean(mtcars$mpg)}. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat \\Sexpr{summary(lm(mpg ~ hp + drat, mtcars))} non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.'
regmatches(txt, gregexpr('(?<=\\Sexpr{).+?(?=})', txt, perl=T))
## [[1]]
## [1] "mean(mtcars$mpg)" "summary(lm(mpg ~ hp + drat, mtcars))"