py自动化脚本实现去除hexo标签插件语法

py自动化脚本实现去除hexo标签插件语法

需求

鱼和熊掌不可兼得,当采用typora编写md文档时,typora等其他软件是不支持hexo的插件语法的,故而不会实时渲染的.只会显示源代码: 例如

{% note danger, note error/danger %}
{% note success, note done/success %}

当同步发表到CSDN等其他博客时,会把源代码显示出来,显得非常不美观,且含有乱码.

故而写一个自动化脚本去除含有 hexo 语法的 内容, 尝试还源一个纯净的md文件

代码

# !/usr/bin/python
# -*- coding: utf-8 -*-
# @Author: float311@163.com; sizaif2000@163.com
# @Description: 将hexo博客修改为csdn可以使用的格式
# @Date 2021/8/8 17:59
# @Update 2021-08-09  10:17:50
# @note:
#   已知bug:
#          1. hexo语法不能与文本混用,即处在一行中, 例如: 带 {% u 下划线 %} 的文本 ; 会导致 文本内容丢失
#          2. 代码框中内容也会被处理
import sys,re

def matchstring(line):
    # radio, checkout note
    matchradio = re.search(r'{% [rcn].*',line,re.I)
    if matchradio:
        return re.sub(
            r'%}',
            "",
            ','.join(line.split(',')[1:])
        ).replace(" ", "")
    # floding timeline, tab end
    matchall = re.search(r'{% [fte].*',line,re.I)
    if matchall:
        # 全部丢弃
        return None
    # link
    matchlink = re.search(r'{% link .*',line,re.I)
    if matchlink:
        temp = line.split(',')
        line = "["+temp[0].split(' ')[-1]+"]("+re.sub(r'%}',"",temp[-1])+")"
        return  line.strip()
    # audio,video
    matchaudio = re.search(r'{% [av].*',line,re.I)
    if matchaudio:
        return line.split(' ')[-2].replace(" ","")
    # <!--类
    matchall2 = line.find("<!--")
    if matchall2:
        return None
def modify(original, result):
    """
    根据hexo MD文件生成CSDN博客适用的MD文件
    :param original: 源文件
    :param result: 新文件
    """
    content = ""
    with open(original, "r+", encoding="UTF-8") as o:
        for line in o.readlines():
            if line.find("{%") == -1 and line.find("<!--"):
                content += line
            else:
                line = matchstring(line)
                if line is not None:
                    content += line

    with open(result, "w+", encoding="UTF-8") as n:
        n.write(content)


if __name__ == '__main__':
    original_md = sys.argv[1] + ".md"
    result_md = sys.argv[2] + ".md"
    modify(original_md, result_md)

使用方法

# 文件名不需要带md
$ py main 源文件 输出文件

已知bug

  1. radio,checkout,note 文本内容中不能含有’,’(逗号), 会导致分割数据丢失

  2. hexo语法不能与文本混用,即处在一行中, 例如: 带{% u 下划线 %}的文本; 会导致文本内容丢失

  3. 代码块内的内容也会被处理

上面的情况暂时需要手动处理

联系

如果有任何的改进建议,可随时联系 sizaif2000@163.com

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值