R 中的多行正则表达式

Multiline regular expressions in R

我需要在一大堆包含逗号的 knitr 文档 (.Rnw) 中找到 LaTeX \index 命令的实例。这些可能出现在多行中,例如

\index{prior distribution,choosing beta prior for
$\pi$,vague prior knowledge}

我对我的 R 代码找到东西相当满意:

line = paste(readLines(input), collapse = "\n")
r = gregexpr(pattern, line)

if(length(r) > 0){
    lapply(regmatches(line, r), function(e){cat(paste(substr(e, 0, 50), "\n"))})
}

但是,我似乎无法正确使用正则表达式。我试过了

pattern = "(\s)\\index\{.*[,][^}]*\}"

得到一些但不是全部

pattern = "\\index\{[A-Za-z \s][^}]*\}"

得到更多,但很多我不想要。例如它找到

\index{posterior variance!beta distribution}

感谢任何帮助。

通常,连续使用多个正则表达式比一个正则表达式更容易满足您的需求。你的情况:

library(stringr)
t = "\index{prior distribution,choosing beta prior for
  \$\pi\$,vague prior knowledge} bleh
\index{posterior variance!beta distribution}"
cat(t)

tier_1 = str_match_all(t, "(?s)\index\{.*?\}")[[1]]
tier_2 = tier_1[str_detect(tier_1, ",")]

第一个正则表达式找到所有 \index{} 内容,。第二个只保留那些有逗号的。

这是第一个,不是第二个。您可以像这样添加更多层来整理不需要的东西。