我正在使用正则表达式,使用以下代码:
Regexp.new("^(?<ast>\\\*\\\*)?(?<key>#{@meta_types.join("|")}):(?<value>.*)\\k<ast>?$", Regexp::MULTILINE)
我想要的是解析基本元数据,如下所示:
标题:书籍的某些标题
除此之外,有些线路周围有**,而其他线路没有。问题是<value>
下的某些项目跨越多行,因此我无法执行?<value>.*?
。基本上,当且仅当存在第一个<ast>
分组时,我才需要第二个<ast>
分组。
有没有办法做到这一点,或者某人有更好的解决方案?
*(这是一个Word-to-Markdown转换,有些行是粗体。)
编辑:解决方案
r = Regexp.new("(?<ast>(?:\\\*\\\*)?)(?<key>Title):(?<value>[^\*]*)\k<ast>", Regexp::MULTILINE)
s = "**Title: Some pieces of text with a random\nnewline thrown in for good measure**\n"
r.match s
答案 0 :(得分:0)
替换:
(?<ast>\\\*\\\*)?
使用:
(?<ast>(?:\\\*\\\*)?)
并删除最后的“?”最后。
这将强制第一个捕获组存在,即使它不匹配。