非贪婪正则表达式在 pandoc 生成的降价文件中匹配太多



问题

我正在尝试在 Pandoc 工作流程中编写一个简单的中间步骤。我有一个.docx的原始文档,我正在使用--track-changes开关将其转换为.md(有关更多信息,请参阅 Pandoc 阅读器选项)以生成一个 markdown 文件,该文件将 MS 单词插入/删除/注释包装在span标签中,例如

[Insertion text]{.insertion id="1" author="Jamie Bowman" date="2019-04-01T11:05:00Z"}

[Deletion text]{.deletion id="1" author="Jamie Bowman" date="2019-04-01T11:05:00Z"}

[Comment body]{.comment-start id="1" author="Jamie Bowman" date="2019-04-01T11:05:00Z"}[]{.comment-end id="1"}

我想在 markdown 文件上运行正则表达式查找和替换,该文件有效地"接受"插入和删除,但保留注释跨度。(当我转换回.docx时就是这样,我有一个干净的.docx文件,只有注释。

我尝试过什么

我已经能够接受所有插入范围并删除所有删除范围,但前提是正文文本不超过一行。我尝试在新行之间匹配太多,我无法弄清楚如何仅匹配确切的文本。

以下正则表达式匹配几乎所有删除内容,然后我可以将其替换为任何内容:

查找:[(.*?)]{.deletion(.|n)*?}

取代:

插入也是如此,然后我可以使用反向引用来保留文本但删除跨度:

查找:$1

替换:[[^[]*?]{.deletion.*?}

但是,正如您在此处看到的那样,这些模式匹配得太多了。

如果有任何不清楚的地方,请告诉我。我今天一直在研究这个问题,很难清楚地解释这个问题!提前谢谢。

以下正则表达式应与删除片段匹配:

([^[]*?)

插入的正则表达式基本相同,除了您必须有一个捕获组[([^[]*?)]{.insertion.*?}

CC_16

最新更新