python html转markdown

# 将html转换为markdown
def html_to_markdown(html):
    # 移除HTML标签
    text = re.sub(r'</?[^>]+>', '', html)
    text = unescape(text)  # 解码HTML实体

    # 移除<style>和<script>标签及其内容
    text = re.sub(r'<style>.*?</style>', '', text, flags=re.DOTALL)
    text = re.sub(r'<script>.*?</script>', '', text, flags=re.DOTALL)

    # 将换行符替换为两个空格
    text = re.sub(r'\n', '  ', text)

    # 将两个或更多连续空格替换为一个空格
    text = re.sub(r' +', ' ', text)

    # 将标题替换为Markdown格式
    text = re.sub(r'<h1>(.*?)</h1>', r'# \1', text)
    text = re.sub(r'<h2>(.*?)</h2>', r'## \1', text)
    text = re.sub(r'<h3>(.*?)</h3>', r'### \1', text)
    text = re.sub(r'<h4>(.*?)</h4>', r'#### \1', text)
    text = re.sub(r'<h5>(.*?)</h5>', r'##### \1', text)
    text = re.sub(r'<h6>(.*?)</h6>', r'###### \1', text)

    # 将链接替换为Markdown格式
    text = re.sub(r'<a href="(.*?)">(.*?)</a>', r'[\2](\1)', text)

    # 将有序列表替换为Markdown格式
    text = re.sub(r'<ol>\s*(<li>(.*?)</li>)\s*</ol>', lambda m: "".join(f"{i+1}. {v}" for i, v in enumerate([x[1] for x in re.findall(r'<li>(.*?)</li>', m.group(0))])), text)

    # 将无序列表替换为Markdown格式
    text = re.sub(r'<ul>\s*(<li>(.*?)</li>)\s*</ul>', lambda m: "".join(f"- {v}" for v in [x[1] for x in re.findall(r'<li>(.*?)</li>', m.group(0))]), text)

    # 将粗体文本替换为Markdown格式
    text = re.sub(r'<b>(.*?)</b>', r'**\1**', text)

    # 将斜体文本替换为Markdown格式
    text = re.sub(r'<i>(.*?)</i>', r'*\1*', text)

    # 将代码块替换为Markdown格式
    text = re.sub(r'<pre><code>(.*?)</code></pre>', r'```\n\1\n```', text, flags=re.DOTALL)

    # 将水平分割线替换为Markdown格式
    text = re.sub(r'<hr/?>', r'---', text)

    return text
   

作者:spike

分类: Python

创作时间:2024-09-29

更新时间:2024-09-29

联系方式放在中括号之中例如[[email protected]],回复评论在开头加上标号例如:#1