删除Markdown内部的HTML元素

时间:2018-11-15 01:24:51

标签: shell markdown pandoc

目标

将带有HTML的Markdown文件转换为纯Markdown

代码:in.md

# Title

## Subtitle

### Sub-subtitle

<span><div>Line before image</div><div><br></div><div><img src="img.png" width=404 height=255><br></div><div><br></div><div>Line after image</div><div><br></div><div>Text</div></span><h1><span>Heading 1</span></h1><span><div>Text</div><div><br></div></span><h2><span>Heading 2</span></h2><span><div>Text</div></span><h3><span>Heading 3</span></h3><div><span>Text</span></div><div><span><br></span></div><span><div>Line before code</div><code><pre><code><div>Code line 1</div><div>Code line 2</div><div>Code line 3</div></code></pre></code><div><span style="">Line after code</span><br></div><div><span style=""><br></span></div><div><span style=""><a href="http://pandoc.org">Link</a></span></div><div><span style=""><br></span></div><div><ul><li>Unordered bullet 1<br></li><li>Unordered bullet 2<br></li></ul></div><div><span style=""><br></span></div><div><ol><li>Ordered bullet 1<br></li><li>Ordered bullet 2<br></li></ol></div><div><span style=""><br></span></div></span><blockquote style="margin:0 0 0 40px;border:none;padding:0px;"><span><div><span style="">Quote line 1</span></div></span><span><div><span style="">Quote line 2</span></div></span></blockquote><span><div><span style=""><br></span></div><div><span style="">Text</span></div><div><span style=""><br></span></div><div><i>Italic</i></div><div><i><br></i></div><div>Text</div><div></div></span>

Markdown text

More Markdown text

尝试

我尝试了许多Pandoc脚本:

尝试1

pandoc -f markdown -t markdown_strict --atx-headers in.md -o out.md

  • 添加了换行符

  • 无转换

从结果中提取

<h3>
<span>H3</span>
</h3>
<span>txt</span>

<span><br></span>

<ul>
<li>
bullet<br>
</li>
<li>
list<br>
</li>
</ul>

第二次对结果运行转换命令无济于事。

尝试2

pandoc -f markdown -t markdown_strict-native_divs-native_spans --atx-headers in.md -o out.md

结果

与上述相同

尝试3

pandoc -f markdown-markdown_in_html_blocks -t markdown_strict-native_divs-native_spans --atx-headers in.md -o out.md

结果

与上面相同,换行符更少

尝试4

pandoc -f markdown -t markdown_strict-native_divs-native_spans-raw_html --atx-headers in.md -o out.md

从结果中提取

所有HTML元素均被删除,但未应用Markdown:

Heading 1
Text

Heading 2
Text

Heading 3
Text

Unordered bullet 1
Unordered bullet 2
Unordered bullet 3

其他

  • 我无法调整最初生成in.md的方式。

  • Pandoc不必成为解决方案的一部分。但是,使用Pandoc似乎很有意义,因为(1)转换需要由Azure DevOps发布管道执行,并且运行一个简单命令非常适合该工作流程,并且(2)所需结果只是一个干净的Markdown文件。 / p>

  • 我可以使用Regex编写解决方案的脚本(如果没有其他解决方案的话,也可以这样做),但是如果Pandoc命令(或其他解决方案)完成了该解决方案,那么似乎不太容易出现人为错误。

谢谢您的任何想法或建议。

1 个答案:

答案 0 :(得分:4)

我的建议是先将整个文档转换为HTML,然后将结果转换为所需的Markdown格式:

pandoc --from=markdown --to=html in.md | \
    pandoc --from=html --to=markdown-raw_html-native_divs --output out.md

请注意,输入内容似乎包含无效的HTML(例如,根据HTML标准,divspan元素中不得出现code),因此嵌入式HTML并不完全明白它的意思。

还会注意到一些仅包含换行符的跨度,这会使输出看起来很丑陋。最好的解决方案是通过pandoc filter删除它们。