You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 11:59:54