更新GenerateProblemListFromString2024功能, 和新的"新题比对"适配

This commit is contained in:
weiye.wang 2024-02-04 11:53:23 +08:00
parent c6cbfd6053
commit 2c8293d864
1 changed files with 22 additions and 23 deletions

View File

@ -268,6 +268,7 @@ def GenerateProblemListFromString2024(data): #从来自.tex文件的字符串生
except: except:
pass pass
data = re.sub(r"\n{2,}","\n",data) data = re.sub(r"\n{2,}","\n",data)
data = re.sub(r"\\definecolor[^\n]*\n","\n",data)
data = re.sub(r"\\begin\{tcolorbox\}[\s\S]*?\\end\{tcolorbox\}","\n",data) data = re.sub(r"\\begin\{tcolorbox\}[\s\S]*?\\end\{tcolorbox\}","\n",data)
data = re.sub(r"\\item",r"\\enditem\\item",data) data = re.sub(r"\\item",r"\\enditem\\item",data)
data = re.sub(r"\\end\{enumerate\}",r"\\enditem",data) #切除无关信息, 保留关键信息 data = re.sub(r"\\end\{enumerate\}",r"\\enditem",data) #切除无关信息, 保留关键信息
@ -280,31 +281,29 @@ def GenerateProblemListFromString2024(data): #从来自.tex文件的字符串生
content_raw = re.sub(r"\n\%[\s\S]*$","",content_raw) #题目内容 content_raw = re.sub(r"\n\%[\s\S]*$","",content_raw) #题目内容
content_raw = re.sub(r"\\\\$","",content_raw) # 删去题目最后一行处可能存在的\\ content_raw = re.sub(r"\\\\$","",content_raw) # 删去题目最后一行处可能存在的\\
content_raw = content_raw.strip() # 删去前后多余的空格 content_raw = content_raw.strip() # 删去前后多余的空格
meta = {}
if not content_raw[0] == "[": # 根据方括号内的内容生成交互信息, 这是无方括号的内容, 无meta if not content_raw[0] == "[": # 根据方括号内的内容生成交互信息, 这是无方括号的内容, 无meta
content = content_raw content = content_raw
meta = {} else:
elif re.findall(r"^\[rep(\d+)\]",content_raw) != []: # 方括号以rep开始, 用已有的题号代替, 字典中显示唯一的题号 same_id_list = []
related_id_list = []
unrelated_id_list = []
content = re.sub(r"^\[rep(\d+)\]","",content_raw).strip() content = re.sub(r"^\[rep(\d+)\]","",content_raw).strip()
meta = {"rep":re.findall(r"\[rep(\d+)\]",content_raw)[0].zfill(6)} metaraw = re.findall(r"\[.*\]",content_raw)[0]
else: # 方括号不以rep开始, 用s,r,u分别表示相同, 相关, 无关, 返回有这三个字段的字典 metaraw = re.sub(r"[\[\]]","",metaraw)
content = re.sub(r"^\[.*?\]","",content_raw).strip() metalist = metaraw.split(",")
metaraw = re.findall(r"^\[(.*?)\]",content_raw)[0] for metaitem in metalist:
sameidraw = re.findall(r"s([\d,:]*)",metaraw) metaitem = metaitem.upper()
if not sameidraw == []: if metaitem.startswith("REP"):
same_id_list = generate_number_set(sameidraw[0]) meta = {"rep":metaitem[3:].zfill(6)}
else: elif metaitem.startswith("S"):
same_id_list = [] same_id_list.append(metaitem[1:].zfill(6))
relatedidraw = re.findall(r"r([\d,:]*)",metaraw) elif metaitem.startswith("R"):
if not relatedidraw == []: related_id_list.append(metaitem[1:].zfill(6))
related_id_list = generate_number_set(relatedidraw[0]) elif metaitem.startswith("U"):
else: unrelated_id_list.append(metaitem[1:].zfill(6))
related_id_list = [] if not "rep" in meta:
unrelatedidraw = re.findall(r"u([\d,:]*)",metaraw) meta = {"same":same_id_list,"related":related_id_list,"unrelated":unrelated_id_list}
if not unrelatedidraw == []:
unrelated_id_list = generate_number_set(unrelatedidraw[0])
else:
unrelated_id_list = []
meta = {"same":same_id_list,"related":related_id_list,"unrelated":unrelated_id_list}
subdata = data[:pos[0]] #开始寻找出处中缀 subdata = data[:pos[0]] #开始寻找出处中缀
suflist = re.findall(r"\n(\%\s{0,}[\S]+)\n",subdata) suflist = re.findall(r"\n(\%\s{0,}[\S]+)\n",subdata)
if len(suflist) == 0: if len(suflist) == 0: