You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何用Python正则提取Word文档中结构化试题内容

解决Word/TXT文件中提取结构化单项选择题的问题

嘿,我来帮你搞定这个提取选择题的难题!你之前用docxre库的思路完全没问题,只是可能在文本提取和正则匹配的细节上没处理到位。下面我给你一套完整的实现方案,分Word和TXT两种情况来讲解:

核心思路

我们需要先把文件里的所有文本完整提取出来,再用正则表达式精准匹配每一道从题号开始到[QuestionType]结束的内容,最后把匹配到的结果存入列表,每一项就是一道独立的题目。


一、处理Word文件(用python-docx库)

首先确保你已经安装了依赖库:

pip install python-docx

完整代码示例:

import docx
import re

def extract_questions_from_docx(docx_path):
    # 读取Word文档,提取所有段落文本
    doc = docx.Document(docx_path)
    full_text = []
    for para in doc.paragraphs:
        # 跳过空段落(避免多余的换行干扰匹配)
        if para.text.strip():
            full_text.append(para.text)
    # 把所有段落拼接成带换行的字符串,保留题目原本的结构
    full_text_str = '\n'.join(full_text)
    
    # 正则匹配规则:适配数字题号(比如1.、2.)的题目
    # 如果你题号是其他格式(比如1、第一题),可以修改正则的开头部分
    pattern = re.compile(r'(\d+\..*?\[QuestionType\])', re.DOTALL)
    # re.DOTALL让.可以匹配换行符,确保跨段落的题目也能被完整抓取
    questions = pattern.findall(full_text_str)
    
    return questions

# 调用示例
if __name__ == "__main__":
    docx_file = "你的题目文件.docx"
    extracted_questions = extract_questions_from_docx(docx_file)
    
    # 打印提取结果
    for i, question in enumerate(extracted_questions, 1):
        print(f"第{i}道题:\n{question}\n{'='*50}")

二、处理TXT文件

TXT文件的处理更简单,直接读取全部内容即可,正则规则和上面一致:

import re

def extract_questions_from_txt(txt_path):
    # 读取TXT文件内容
    with open(txt_path, 'r', encoding='utf-8') as f:
        full_text_str = f.read()
    
    # 同样的正则匹配规则
    pattern = re.compile(r'(\d+\..*?\[QuestionType\])', re.DOTALL)
    questions = pattern.findall(full_text_str)
    
    return questions

# 调用示例
if __name__ == "__main__":
    txt_file = "你的题目文件.txt"
    extracted_questions = extract_questions_from_txt(txt_file)
    
    for i, question in enumerate(extracted_questions, 1):
        print(f"第{i}道题:\n{question}\n{'='*50}")

关键细节说明

  1. 正则表达式的灵活调整

    • 如果你的题号是中文格式(比如第一题第二题),把正则开头改成(第\d+题.*?\[QuestionType\])
    • 如果题号是1、这种顿号格式,把\d+\.改成\d+、
    • .*?非贪婪匹配,一定要用这个!不然会从第一题的题号直接匹配到最后一个[QuestionType],把所有题合并成一个
  2. Word文件的特殊情况

    • 如果你的Word里有表格、图片或者复杂格式,python-docx提取的文本可能会丢失部分内容,这时候可以先把Word另存为TXT文件,再用TXT的处理方法更稳妥
    • 要是必须直接处理复杂Word,也可以试试pywin32库(仅Windows可用),它能更精准地提取带格式的文本

内容的提问来源于stack exchange,提问作者Sathish Kumar

火山引擎 最新活动