Regex R中的Markdown正则表达式
我在识别第二级标题项时遇到了一点问题Regex R中的Markdown正则表达式,regex,r,Regex,R,我在识别第二级标题项时遇到了一点问题 x <- c("## This","## This \n\n ### That \n\n ## This again","## The Other") gsub("## ","---\n\n## ",x ) gsub("##\\s","---\n\n## ",x) 我用gsub尝试了一系列不同的组合和实验。但我似乎无法让它忽略第三级或页眉>第二级页眉项目 x <- c("## This","## This \n\n ### That \n\n
x <- c("## This","## This \n\n ### That \n\n ## This again","## The Other")
gsub("## ","---\n\n## ",x )
gsub("##\\s","---\n\n## ",x)
我用gsub尝试了一系列不同的组合和实验。但我似乎无法让它忽略第三级或页眉>第二级页眉项目
x <- c("## This","## This \n\n ### That \n\n ## This again","## The Other")
gsub("## ","---\n\n## ",x )
gsub("##\\s","---\n\n## ",x)
您可以找到以
“##”
开头的字符串,或者不以“#”
开头的字符串,后面跟着“##”
,如下所示,使用
gsub("^## |[^#]## ", "---\n\n## ", x)
[1] "---\n\n## This"
[2] "---\n\n## This \n\n ### That \n\n---\n\n## This again"
[3] "---\n\n## The Other"
括号内的
^
表示“不”。括号外的意思是“以”开头。您可以使用
找到以开头的字符串或不以开头的字符串,后跟“#”
,
,
gsub("^## |[^#]## ", "---\n\n## ", x)
[1] "---\n\n## This"
[2] "---\n\n## This \n\n ### That \n\n---\n\n## This again"
[3] "---\n\n## The Other"
括号内的
^
表示“不”。括号外的意思是“以”Try“(?Try”(?从问题来看,OP似乎在试图找到一种为Slideify生成幻灯片分隔符的方法(我是这本书的作者)。当文档不包含任何带注释的代码块时,上述所有答案都非常有效。我有一个解决方案,可以忽略带注释的代码块,我将其发布到这里主要是为了完成。slide\u header
参数可用于定义应使用分隔符的标题
find_code_lines <- function(doc){
code_blocks = which(grepl("^```", doc))
code_lines = NULL
for (i in seq.int(1, length(code_blocks), by = 2)){
code_lines = c(code_lines, code_blocks[i]:code_blocks[i + 1])
}
return(code_lines)
}
add_slide_separator <- function(deckFile, slide_header = "###"){
doc <- readLines(deckFile)
code_lines = find_code_lines(doc)
pattern = paste0('^(', slide_header, ".*)")
doc[-c(code_lines)] = gsub(pattern, '\n---\n\\1', doc[-c(code_lines)])
writeLines(doc, con = deckFile)
}
find_code_lines从这个问题来看,OP似乎在试图找到一种为Slideify(我是该书的作者)生成幻灯片分隔符的方法。当文档不包含任何带注释的代码块时,上述所有答案都非常有效。我有一个解决方案,可以忽略带注释的代码块,我将其发布到这里主要是为了完成。slide\u header
参数可用于定义应使用分隔符的标题
find_code_lines <- function(doc){
code_blocks = which(grepl("^```", doc))
code_lines = NULL
for (i in seq.int(1, length(code_blocks), by = 2)){
code_lines = c(code_lines, code_blocks[i]:code_blocks[i + 1])
}
return(code_lines)
}
add_slide_separator <- function(deckFile, slide_header = "###"){
doc <- readLines(deckFile)
code_lines = find_code_lines(doc)
pattern = paste0('^(', slide_header, ".*)")
doc[-c(code_lines)] = gsub(pattern, '\n---\n\\1', doc[-c(code_lines)])
writeLines(doc, con = deckFile)
}
find\u code\u line呸!我试过了,但我认为结尾是\\s。谢谢GSee。实际上,这捕获了元素中的第一次出现,但忽略了所有后续出现。我将更新我的示例。不应该“[^#]##”
capture(并因此替换)不是#
的字符?我可以看到输出是正确的,但是为什么?@phalum,你是正确的。这是复制/粘贴错误。我更正了输出(删除了空格).Bah!我试过了,但我认为结尾是\\s。谢谢GSee。实际上,这捕获了元素中的第一次出现,但忽略了所有后续出现。我将更新我的示例。不应该“[^#]#”
捕获(并因此替换)不是#
的字符?我可以看到输出是正确的,但是为什么?@phalum,你是正确的。这是一个复制/粘贴错误。我更正了输出(删除了空格)。检查你请求的输出。你确定这就是你想要的输入吗?第一个“This”之后不应该出现“This”吗?更新,感谢阅读我的想法G。检查您请求的输出。您确定这就是您所希望的输入吗?第一个“This”之后不应该出现“This”吗?更新,感谢阅读我的想法G。是的,你是对的,这是为了谷歌文档集成,我们一直在讨论wrt Slidify。对我来说,带注释的代码块不重要的原因是,所有的代码块都需要外部化,以便它首先工作。至少是我编写它的方式。明白了。我把它与一些req混淆了uests我一直在编写没有分隔符的代码组,像pandoc一样自动分解幻灯片。是的,你说得对,这是为了谷歌文档集成,我们一直在讨论wrt Slideify。带注释的代码块对我来说并不重要,原因是所有的代码块都需要外部化,才能在第一时间工作。在至少是我写它的方式。明白了。我把它和一些我一直在写的没有分隔符的甲板的请求搞混了,像pandoc一样自动破坏幻灯片。