#将高考题md文档分割成单独的题目 import re import os def parse_document(content): """ 解析文档内容,提取所有题目和对应的答案详解 """ # 分割题目部分和答案部分 parts = content.split("**《2024年新课标全国Ⅰ卷数学真题》参考答案**") if len(parts) < 2: return [] questions_part = parts[0] answers_part = parts[1] # 提取所有题目 questions = extract_questions(questions_part) # 提取所有答案 answers = extract_answers(answers_part) # 合并题目和答案 result = [] for i, (q_num, q_content) in enumerate(questions): if i < len(answers): result.append((q_num, q_content, answers[i][1])) return result def extract_questions(content): """ 从题目部分提取所有题目 """ questions = [] # 匹配题目的正则表达式(匹配 "数字." 格式) pattern = r'(\d+).(.*?)(?=\d+.|$)' matches = re.finditer(pattern, content, re.DOTALL) for match in matches: question_num = match.group(1) question_content = match.group(2).strip() questions.append((question_num, question_content)) return questions def extract_answers(content): """ 从答案部分提取所有答案详解 """ answers = [] # 匹配答案的正则表达式 pattern = r'(\d+).(.*?)(?=\d+.|$)' matches = re.finditer(pattern, content, re.DOTALL) for match in matches: answer_num = match.group(1) answer_content = match.group(2).strip() # 清理答案内容,移除开头的选项字母 answer_content = re.sub(r'^[A-D]', '', answer_content).strip() answers.append((answer_num, answer_content)) return answers def get_question_type(question_num): """ 根据题号确定题目类型 """ num = int(question_num) if 1 <= num <= 8: return "单选" elif 9 <= num <= 11: return "多选" elif 12 <= num <= 14: return "填空" else: return "解答" def format_question_md(question_num, question_content, answer_content): """ 格式化单个题目为Markdown格式,答案用callouts隐藏 """ question_type = get_question_type(question_num) # 添加元数据 metadata = f"""--- Tags: - 题库 年份: 2024 源卷: 全国1 原题号: {question_num} 题目类型: {question_type} 知识点: - 难度: --- """ # 处理答案内容,每一行都加上 > 前缀 formatted_answer = "" for line in answer_content.split('\n'): if line.strip(): # 非空行 formatted_answer += f"> {line}\n" else: # 空行 formatted_answer += ">\n" md_content = f"""{metadata}# 第{question_num}题 ## 题目 {question_content} ## 答案 > [!question]- 点击查看答案 {formatted_answer} """ return md_content def save_questions(questions_data, output_dir="questions"): """ 保存所有题目为单独的Markdown文件 """ if not os.path.exists(output_dir): os.makedirs(output_dir) for question_num, question_content, answer_content in questions_data: filename = f"{question_num}.md" filepath = os.path.join(output_dir, filename) md_content = format_question_md(question_num, question_content, answer_content) with open(filepath, 'w', encoding='utf-8') as f: f.write(md_content) print(f"已保存: {filename}") def main(): # 读取文档内容(这里使用文档2的内容) with open('document2.txt', 'r', encoding='utf-8') as f: content = f.read() # 解析文档 questions_data = parse_document(content) if not questions_data: print("未能解析出题目数据") return print(f"成功解析 {len(questions_data)} 道题目") # 保存为单独的Markdown文件 save_questions(questions_data) if __name__ == "__main__": main()