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{} 内容,。第二个只保留那些有逗号的。
这是第一个,不是第二个。您可以像这样添加更多层来整理不需要的东西。
我需要在一大堆包含逗号的 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{} 内容,
这是第一个,不是第二个。您可以像这样添加更多层来整理不需要的东西。