500章小说转Word后标题全消失?目录生成变“开盲盒”?
小编被这问题坑过三回!今天掏心窝分享 正则抓标题+样式套用组合拳,三步搞定批量转换,目录精准度直逼出版社标准!
► 第一步:正则抓标题——把散装章节变目录骨架
为啥直接转DOCX标题全变普通段落?
TXT压根没标记标题层级!Word只会无脑堆文字。正则表达式才是目录救星,两步锁死章节:
python下载复制运行import re # 匹配“第X章”“Chapter 1”“【序幕】”等标题 pattern = r'(第[一二三四五六七八九十百千]+章|Chapter\s\d+|【\w+】)' titles = re.findall(pattern, text) # 一网打尽
特殊标题抓漏咋办?加规则补刀!
带数字序号:补
|\d+\.\s+.+
抓“1. 序幕”多级标题:加
|(?:[一二三四]、).+
抓“二、关键战役”
避坑实测:
先用前5章测试规则,漏抓率从50%降到8%!《三体》这种带“危机纪元”的,得补规则
|纪元\d+年
► 第二步:编码修复——绞杀中文乱码和BOM炸弹
转完满屏“大战”火星文?
90%是GBK硬塞进UTF-8的惨案!双保险急救方案:
保险1:动态编码探测
用 chardet
自动识别真实编码,专治GBK/GB18030乱码:
python下载复制运行import chardet with open('novel.txt', 'rb') as f: raw_data = f.read(10000) # 读前1万字节足够判定 encoding = chardet.detect(raw_data)['encoding'] # 返回真实编码
保险2:BOM暗箭拆除
UTF-8文件开头的
\ufeff
是隐藏炸弹:python下载复制运行if text.startswith('\ufeff'): text = text[1:] # 一刀切掉!
► 第三步:样式套用——让目录自动生成且可点击
标题抓到了,但Word不认怎么办?
普通段落 ≠ 标题!必须用 python-docx的样式引擎:
python下载复制运行from docx import Document doc = Document() for line in text.split('\n'): if re.match(pattern, line): # 如果是标题行 doc.add_heading(line, level=1) # 设为1级标题 else: doc.add_paragraph(line) # 普通正文
目录生成彩蛋:
Word里按 “引用”→“插入目录” ,自动生成带超链接的目录!
小编的暴论+避坑指南
正则别闭眼跑:复杂小说用 多规则组合 ,比如《诡秘之主》得同时抓“Chapter”和“序列号”
大文件先切块:超50MB的用EmEditor切成20MB/份(别用记事本!会造出新乱码)
终极防崩:转换前用
shutil.copy
备份原文件,翻车能秒回滚最后甩个王炸组合:
正则抓标题 + 动态编码探测 + 标题样式套用
实测《三体》三部曲转换,目录准到能直接点跳转——打印店老板都问你用的啥黑科技!
© 版权声明
文章版权归作者所有,未经允许请勿转载。
相关文章
暂无评论...