如何用Python为Word文档指定标签间文本批量设置加粗格式
修复Python处理Word文档批量加粗标签文本的问题
问题根源
原代码的核心问题是每次循环都清空段落并基于原始文本重新构建内容,导致之前的加粗修改被覆盖,最终只保留最后一次处理的结果。
修复方案
改用正则表达式一次性提取所有标签及对应文本,按顺序构建段落的文本块,确保所有匹配项都被正确加粗:
import docx import re # 打开Word文档 doc = docx.Document('sample1.docx') # 匹配转义后的<strong>标签及内容的正则 pattern = re.compile(r'(.*?)<strong>(.*?)</strong>', re.DOTALL) for para in doc.paragraphs: text = para.text if not text: continue # 清空原段落内容 para.clear() current_pos = 0 # 遍历所有匹配的标签块 for match in pattern.finditer(text): # 添加标签前的普通文本 if match.start() > current_pos: para.add_run(text[current_pos:match.start()]) # 添加标签内的加粗文本 para.add_run(match.group(2)).bold = True current_pos = match.end() # 添加最后一个标签后的剩余文本 if current_pos < len(text): para.add_run(text[current_pos:]) # 保存修改后的文档 doc.save('sample_modified.docx')
关键改动说明
- 用
re.finditer遍历所有匹配的标签块,确保不遗漏任何一处需要加粗的内容 - 仅清空段落一次,之后按顺序添加普通文本和加粗文本的
run,彻底避免修改被覆盖的问题 - 处理段落末尾的剩余文本,保证文档内容完整无缺失
效果验证
对于示例文本:
<strong>NOTE:</strong> You <strong>could</strong> obviously do the same <strong>with</strong> ANY style that has a one-to-one mapping from.
修改后将同时把NOTE:、could、with三处文本设为加粗,且保留文档原有格式。
内容的提问来源于stack exchange,提问作者resercher
相关产品推荐
相关产品推荐

