使用python-docx处理Run时单词间缺失空格的问题求助
解决python-docx中Run拼接时的空格问题
不要依赖paragraph.text的自动拼接逻辑,直接遍历段落中的Run,自己控制空格的添加,这样既能筛选符合样式/颜色要求的Run,又能避免单词挤在一起或出现多余空格。
具体实现方法
写一个自定义函数,遍历目标段落的Run,先筛选出符合条件的Run,再根据相邻Run的文本内容判断是否需要添加空格:
from docx import Document def get_filtered_paragraph_text(paragraph, filter_condition): # 先筛选出符合条件的Run target_runs = [run for run in paragraph.runs if filter_condition(run)] text_segments = [] for idx, run in enumerate(target_runs): text_segments.append(run.text) # 处理当前Run和下一个Run之间的空格逻辑 if idx < len(target_runs) - 1: current_text = run.text next_text = target_runs[idx+1].text # 只有当当前Run结尾和下一个Run开头都不是空格,且都是字母/数字时,才添加空格 if current_text and next_text: current_end = current_text[-1] next_start = next_text[0] if (current_end not in ' \t\n' and next_start not in ' \t\n' and current_end.isalnum() and next_start.isalnum()): text_segments.append(' ') return ''.join(text_segments)
使用示例
比如要筛选段落中字体为红色的Run并拼接成正确的文本:
doc = Document("your_file.docx") for para in doc.paragraphs: # 定义筛选条件:字体颜色为红色(RGB值(255,0,0)) red_text = get_filtered_paragraph_text( para, lambda run: run.font.color.rgb is not None and run.font.color.rgb == (255, 0, 0) ) print(red_text)
原理说明
python-docx的paragraph.text之所以会自动在Run间加空格,是因为它试图还原Word文档中视觉上的文本显示效果,但实际这些Run本身并没有包含空格。手动控制空格逻辑,能精准匹配你需要的拼接规则,避免自动拼接带来的误差。
内容的提问来源于stack exchange,提问作者andy
相关产品推荐
相关产品推荐

