我需要在一大堆带有逗号的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}
任何帮助表示感谢。
答案 0 :(得分:1)
通常,连续使用多个正则表达式比使用正确的正则表达式更容易。在你的情况下:
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 {}的东西,across lines。第二个只保留逗号。
这是第一个,而不是第二个。你可以添加更多层来排序你不想要的东西。