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

时间:2019-04-16 14:12:59

标签: regex markdown pcre pandoc

问题

我正在尝试在Pandoc工作流程中编写一个简单的中介步骤。我在.docx中有一个原始文档,我正在使用.md开关将其转换为--track-changes(有关更多信息,请参见Pandoc reader options)以生成带有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文件上运行一个regexp查找并替换它,该文件可以有效地“接受”插入和删除,但保留注释范围。 (因此,当我转换回.docx时,我有一个干净的.docx文件,仅包含注释。)

我尝试过的

我已经能够接受所有插入范围并删除所有删除范围,但是仅当正文不超过一行时才可以。我尝试在新行之间进行匹配的尝试太多,因此我无法找出仅匹配确切文本的方法。

以下正则表达式几乎匹配所有删除的内容,然后我什么都可以替换掉:

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

替换:

与插入相同,然后可以使用向后引用保留文本但删除跨度:

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

替换:$1

不过,模式匹配得太多,如您所见here

请让我知道是否有任何不清楚的地方。我今天已经做了很多工作,很难一目了然地解释这个问题!预先感谢。

1 个答案:

答案 0 :(得分:0)

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

\[[^[]*?\]{\.deletion.*?}

插入的正则表达式基本相同,除了必须具有捕获组([^[]*?\)

\[([^[]*?\)]{\.insertion.*?}