Python:如何将Markdown格式文本转换为纯文本

55 投票
7 回答
46450 浏览
提问于 2025-04-15 11:09

我需要把markdown格式的文本转换成普通文本格式,这样可以在我的网站上显示摘要。我想要用Python来写这个代码。

7 个回答

8

这和Jason的回答有点像,但处理评论的方式更准确。

import markdown # pip install markdown
from bs4 import BeautifulSoup # pip install beautifulsoup4

def md_to_text(md):
    html = markdown.markdown(md)
    soup = BeautifulSoup(html, features='html.parser')
    return soup.get_text()

def example():
    md = '**A** [B](http://example.com) <!-- C -->'
    text = md_to_text(md)
    print(text)
    # Output: A B
68

虽然这个问题已经很老了,但我想分享一个我最近想到的解决方案。这个方案既不使用BeautifulSoup,也不需要把内容转换成HTML再转换回来。

markdown模块的核心类Markdown有一个属性叫output_formats,这个属性是不能配置的,但在Python中几乎所有东西都可以进行修改,所以我们可以对它进行一些调整。这个属性是一个字典,它把输出格式的名称和对应的渲染函数联系起来。默认情况下,它有两种输出格式,分别是'html'和'xhtml'。通过一些小技巧,我们可以为它添加一个简单的文本渲染函数:

from markdown import Markdown
from io import StringIO


def unmark_element(element, stream=None):
    if stream is None:
        stream = StringIO()
    if element.text:
        stream.write(element.text)
    for sub in element:
        unmark_element(sub, stream)
    if element.tail:
        stream.write(element.tail)
    return stream.getvalue()


# patching Markdown
Markdown.output_formats["plain"] = unmark_element
__md = Markdown(output_format="plain")
__md.stripTopLevelTags = False


def unmark(text):
    return __md.convert(text)

unmark函数接收markdown文本作为输入,并返回去掉所有markdown字符的纯文本。

55

MarkdownBeautifulSoup(现在叫做beautifulsoup4)这两个模块可以帮助你完成你所描述的工作。

一旦你把Markdown转换成HTML格式,就可以使用一个HTML解析器来提取出纯文本。

你的代码可能看起来像这样:

from bs4 import BeautifulSoup
from markdown import markdown

html = markdown(some_html_string)
text = ''.join(BeautifulSoup(html).findAll(text=True))

撰写回答