用markdown做笔记或者写文档时,会涉及到标题的序号。虽然Typora有相关插件,但是导出markdown时,序号不能一起导出。因此需要自动化实现添加标题序号。
要求- markdown文件中的标题需要是以# 一级标题(最后有空格)的格式
- 暂时没考虑markdown文件中有python的代码注释的情况
- 正则表达式匹配标题行
- 获取标题等级,更新标题列表
- 拼接小于该等级的标题序号
- 重置大于该等级的标题序号
import re def replace_title_num(markdown_src, markdown_dst): """ 替换标题序号 :param markdown_src: markdown源文件 :param markdown_dst: markdown目标文件 :return: """ with open(markdown_src, 'rb') as f: txt = f.read().decode() # 默认6个标题等级 heading_level = [0] * 7 # 正则表达式编译标题格式,必须是 1-6个#和空格开始 head_pattern = re.compile("^(#{1,6}) ") new_markdown = [] for line in txt.splitlines(): result = re.search(head_pattern, line) if not result: new_markdown.append(line) continue level = len(result.group(1)) heading_level[level] += 1 # int 转 str num_str = map(str, heading_level[1:level+1]) # 拼接并替换字符串 title = f"{result.group(1)} {'.'.join(num_str)}." heading_level[level+1:] = [0]*(7-level) line = line.replace(result.group(1), title) new_markdown.append(line) new_content = "n".join(new_markdown) with open(markdown_dst, "w", encoding='utf8') as f: f.write(new_content) if __name__ == '__main__': markdown_src = r"E:Codemarkdown数据科学2.md" markdown_dst = r"E:Codemarkdown数据科学_带序号.md" replace_title_num(markdown_src, markdown_dst)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)