#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ 清理面试题答案中的选项,只保留正确答案 """ import re from datetime import datetime print("=== 清理面试题答案中的选项 ===\n") # 1. 读取当前mock文件 print("1. 读取当前mock文件...") with open('src/mocks/resumeInterviewMock.js', 'r', encoding='utf-8') as f: content = f.read() # 2. 备份 backup_time = datetime.now().strftime('%Y%m%d_%H%M%S') backup_file = f'src/mocks/resumeInterviewMock.js.backup_clean_options_{backup_time}' print(f"2. 创建备份: {backup_file}") with open(backup_file, 'w', encoding='utf-8') as f: f.write(content) # 3. 处理答案中的选项 print("\n3. 开始清理答案中的选项...") def clean_answer(match): """清理答案中的选项格式""" full_match = match.group(0) answer_content = match.group(1) # 检查是否包含选项格式(A. B. C. 或 A、B、C、等) if re.search(r'[A-D][\.、]', answer_content): # 尝试提取正确答案 # 模式1: "正确答案是A" 或 "答案:A" correct_match = re.search(r'(?:正确答案[是为::]*|答案[是为::]*)\s*([A-D])', answer_content) if correct_match: option_letter = correct_match.group(1) # 查找该选项的内容 option_pattern = rf'{option_letter}[\.、]\s*([^A-D\n]+?)(?=[A-D][\.、]|$)' option_content = re.search(option_pattern, answer_content) if option_content: # 返回只包含正确答案内容的版本 cleaned_answer = option_content.group(1).strip() # 去除可能的句号或其他标点 cleaned_answer = re.sub(r'[。;;]+$', '', cleaned_answer) return f'"answer": "{cleaned_answer}"' # 模式2: 选项列表后跟正确答案说明 # 例如:"A. 选项1 B. 选项2 C. 选项3 D. 选项4。正确答案是C" if '正确答案' in answer_content or '答案' in answer_content: # 提取所有选项 options = {} option_matches = re.findall(r'([A-D])[\.、]\s*([^A-D\n]+?)(?=[A-D][\.、]|正确答案|答案|$)', answer_content) for letter, content in option_matches: options[letter] = content.strip().rstrip('。;;') # 找出正确答案 correct_match = re.search(r'(?:正确答案|答案)[是为::]*\s*([A-D])', answer_content) if correct_match and correct_match.group(1) in options: return f'"answer": "{options[correct_match.group(1)]}"' # 如果没有选项格式或无法处理,返回原始内容 return full_match # 4. 执行替换 original_content = content # 匹配 "answer": "..." 模式 pattern = r'"answer":\s*"([^"]*(?:\\.[^"]*)*)"' # 统计处理的答案数量 matches = re.findall(pattern, content) total_answers = len(matches) print(f"找到 {total_answers} 个答案") # 处理包含选项的答案 processed = 0 for match in re.finditer(pattern, content): answer_text = match.group(1) if re.search(r'[A-D][\.、]', answer_text): processed += 1 print(f"其中 {processed} 个答案包含选项格式") # 执行替换 content = re.sub(pattern, clean_answer, content) # 5. 额外的清理模式 print("\n4. 执行额外的清理模式...") # 清理常见的选项格式 def additional_clean(text): """额外的清理规则""" # 移除"选项:"开头 text = re.sub(r'"answer":\s*"选项[::]\s*', '"answer": "', text) # 如果答案以单个字母开头(如"A 内容"),去掉字母 text = re.sub(r'"answer":\s*"[A-D]\s+([^"]+)"', r'"answer": "\1"', text) # 如果答案以"A."或"A、"开头,去掉 text = re.sub(r'"answer":\s*"[A-D][\.、]\s*([^"]+)"', r'"answer": "\1"', text) return text content = additional_clean(content) # 6. 保存文件 print("\n5. 保存更新后的文件...") with open('src/mocks/resumeInterviewMock.js', 'w', encoding='utf-8') as f: f.write(content) # 7. 验证语法 print("\n6. 验证语法...") import subprocess result = subprocess.run(['node', '-c', 'src/mocks/resumeInterviewMock.js'], capture_output=True, text=True) if result.returncode == 0: print("✅ 语法检查通过!") # 检查是否有变化 if content != original_content: # 再次统计包含选项的答案 remaining_options = len(re.findall(r'"answer":\s*"[^"]*[A-D][\.、]', content)) print(f"\n清理结果:") print(f"- 原始包含选项的答案: {processed} 个") print(f"- 剩余包含选项的答案: {remaining_options} 个") print(f"- 成功清理: {processed - remaining_options} 个") else: print("\n未发现需要清理的选项格式") else: print("❌ 语法错误:") print(result.stderr) print("\n正在恢复备份...") with open(backup_file, 'r', encoding='utf-8') as f: content = f.read() with open('src/mocks/resumeInterviewMock.js', 'w', encoding='utf-8') as f: f.write(content) print("已恢复到备份版本") print("\n✅ 清理完成!")