更新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,30 +281,28 @@ 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 = {}
elif re.findall(r"^\[rep(\d+)\]",content_raw) != []: # 方括号以rep开始, 用已有的题号代替, 字典中显示唯一的题号
content = re.sub(r"^\[rep(\d+)\]","",content_raw).strip()
meta = {"rep":re.findall(r"\[rep(\d+)\]",content_raw)[0].zfill(6)}
else: # 方括号不以rep开始, 用s,r,u分别表示相同, 相关, 无关, 返回有这三个字段的字典
content = re.sub(r"^\[.*?\]","",content_raw).strip()
metaraw = re.findall(r"^\[(.*?)\]",content_raw)[0]
sameidraw = re.findall(r"s([\d,:]*)",metaraw)
if not sameidraw == []:
same_id_list = generate_number_set(sameidraw[0])
else: else:
same_id_list = [] same_id_list = []
relatedidraw = re.findall(r"r([\d,:]*)",metaraw)
if not relatedidraw == []:
related_id_list = generate_number_set(relatedidraw[0])
else:
related_id_list = [] related_id_list = []
unrelatedidraw = re.findall(r"u([\d,:]*)",metaraw)
if not unrelatedidraw == []:
unrelated_id_list = generate_number_set(unrelatedidraw[0])
else:
unrelated_id_list = [] unrelated_id_list = []
content = re.sub(r"^\[rep(\d+)\]","",content_raw).strip()
metaraw = re.findall(r"\[.*\]",content_raw)[0]
metaraw = re.sub(r"[\[\]]","",metaraw)
metalist = metaraw.split(",")
for metaitem in metalist:
metaitem = metaitem.upper()
if metaitem.startswith("REP"):
meta = {"rep":metaitem[3:].zfill(6)}
elif metaitem.startswith("S"):
same_id_list.append(metaitem[1:].zfill(6))
elif metaitem.startswith("R"):
related_id_list.append(metaitem[1:].zfill(6))
elif metaitem.startswith("U"):
unrelated_id_list.append(metaitem[1:].zfill(6))
if not "rep" in meta:
meta = {"same":same_id_list,"related":related_id_list,"unrelated":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)