资讯专栏INFORMATION COLUMN

用 Python 实现简单的 Markdown 转换器

OBKoro1 / 2153人阅读

今天心血来潮,写了一个 Markdown 转换器。

import os, re,webbrowser
text = """
# TextHeader
    ## Header1
        List
            - 1 
            - 2
            - 3
        > **quote**
        》 quote2
    ## Header2
        1. *斜体*
        2. [@以茄之名](https://www.zhihu.com/people/e4f87c3476a926c1e2ef51b4fcd18fa3)
        3、 ![](https://pic4.zhimg.com/v2-8560440c136c746730a63813ed701f52_is.jpg)
        
    ## Header3 
        `*[文章地址](https://zhuanlan.zhihu.com/p/39742445)*`
        ·**code1**·
        - [x]是否点赞
"""

程序开头先处理一些行内的语法,比如 code、strong、i 等,用正则直接替换:

text = re.sub(re.compile("([`·])([^`·]+)[`·]"), r"2", text)
text = re.sub(re.compile("**([^*]+)**"), r"1", text)
text = re.sub(re.compile("([^*])*([^*]+)*"), r"12", text)

接着是复杂一点的图片和链接:

text = re.sub(re.compile("([^!])[([^]]+)](([^)]+))"),
              r"12", text)
text = re.sub(re.compile("![([^]]*)](([^)]+))"),
              r"
        %s
        """ % (p_html, line)

因为有序列表和无序列表的区别是头尾的ol和ul,所以要用 list_flag 变量来判断

elif re.match("[+-*] ", line):
    if list_flag == "":
        html += "
    " list_flag = "ul" line = re.sub("[+-*] ", "", line) html += "
  • %s
  • " % (line) elif re.match("[d]+[.、] ", line): if list_flag == "": list_flag = "ol" html += "
      " line = re.sub("[d]+[.、] ", "", line) html += "
    1. %s
    2. " % (line)

处理完后处理其他的语法:

else:
        if list_flag != "":
            html += "
" % list_flag
            list_flag = ""
        if re.match("#+", line):
            well = re.match("#+", line).group().count("#")
            line = re.sub("#+", "", line)
            html += "%s
" % (well, line, well)
        elif re.match("[>》 ]", line):
            line = re.sub("^s*[>》 ]", "", line)
            html += "
%s
" % (line) # elif re.match("[>》 ]", line): # line = re.sub("^s*[>》 ]", "", line) # html += "
%s
" % (line) else: html += line

这里我稍微修改了一点,让 > 和 》 都可以转换成引用,主要是切换中英文标点太难了。

然后就是添加 CSS,自己改了一点马克飞象的进去,因为他的引用做得很漂亮:

with open("markdown.html", "w", encoding="utf-8")as f:
    f.write("""


    
""")
    f.write(html)
    f.write("")

用 Chrome 打开网页:

webbrowser.get("C:/Program Files (x86)/CentBrowser/Application/chrome.exe %s").open(
    "file:///"+os.getcwd()+"/markdown.html")

话说这里也是个坑,系统自带的 Edge 一直打开失败,用那个注册器注册 Chrome 也没办法用 ,最后还是在外网找到了解决方案。

最后的效果:

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/41997.html

相关文章

  • 《HelloGitHub》第 68 期

    摘要:在线尝试的进程管理工具。项目包含了代码实现运行过程动画以及相关论文为系统提供人脸识别解锁电脑的工具。在线阅读教科书计算机体系结构基础第三版。 .markdown-body{word-break:break-word;line-height:1.75;font-weight:400;font-size:15px;overflow-x:hidden;color:#333}.markdown-b...

    番茄西红柿 评论0 收藏2637
  • Python+Flask实战一个实留言板Demo

    摘要:混杂着工作室图片网任务截至今天终于完成了暑假另一个任务把考核任务按照狗书再写一遍受益匪浅,路途荆棘丛生。。。。 混杂着工作室图片网任务,截至今天终于完成了暑假另一个任务把考核任务按照狗书再写一遍受益匪浅,路途荆棘丛生。。。。这里主要记录了增加的功能,更多的可以看源代码代码在线预览 上传头像404 Flask上传文件我实现的主要思路就是,上传文件到服务器,然后读取文件当然你可以用二进制...

    klinson 评论0 收藏0
  • 使Python将HTML文档转换Markdown文档

    摘要:前言我的个人博客是搭建的,风格我很喜欢,也不打算更换。今天发现个有趣的库,可以将转换回试验了一下效果还不错。的作用在这里使用号来分割文章的核心内容,舍弃博客的和。 前言 我的个人博客是Hexo+Next搭建的,风格我很喜欢,也不打算更换。最近可能电脑不好使了,两次重装系统,每次都要重新搭建博客,搭建速度也很快,但是依然有个困扰我的问题,那就是电脑卡死的时候有些博客没有备份,只有上传到G...

    syoya 评论0 收藏0
  • Django 博客开发教程 9 - 支持 Markdown 语法和代码高亮

    摘要:注意如果你按照教程中的方法做完后发现代码依然没有高亮,请依次检查以下步骤确保在渲染文本时添加了拓展,详情见上文。有些样式文件可能对代码高亮没有作用,首先尝试用样式文件做测试。在支持语法和代码高亮追梦人物的博客的评论区留言。 为了让博客文章具有良好的排版,显示更加丰富的格式,我们使用 Markdown 语法来书写我们的博文。Markdown 是一种 HTML 文本标记语言,只要遵循它约定...

    zr_hebo 评论0 收藏0
  • 有备无患「GitHub 热点速览 v.21.38」

    摘要:地址往期回顾用写个塔防游戏热点速览人生重开模拟器热点速览以上为年第个工作周的如果你其他好玩实用的项目,记得来区和我们分享下哟最后,记得你在本文留言区留下你想看的主题限公众号,例如换头。 .markdown-body{word-break:break-word;line-height:1.75;font-weight:400;font-size:15px;overflow-x:hidden;...

    calx 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<