import re # 移除 pred 字段首尾的 \[ 和 \] # 该正则用于去掉字符串开头被颜色宏包裹的 \[,确保公式起始干净 PATTERN_STRIP_START_BRACKET = re.compile( r"^\s*\\color\{#[\da-fA-F]{6}\}\{\s*\\\[\s*\}\s*" ) # 该正则用于去掉字符串末尾被颜色宏包裹的 \],确保公式结尾干净 PATTERN_STRIP_END_BRACKET = re.compile( r"\s*\\color\{#[\da-fA-F]{6}\}\{\s*\\\]\s*\}\s*$" ) def full_to_half_width(s: str) -> str: """ 将字符串中的全角字符转换为半角字符。 """ res = "" for char in s: inside_code = ord(char) if inside_code == 12288: # 全角空格 inside_code = 32 elif 65281 <= inside_code <= 65374: # 其他全角字符 inside_code -= 65248 res += chr(inside_code) return res def clean_latex_delimiters(latex_string: str) -> str: """ 清理 LaTeX 字符串中的美元符号和双美元符号。 """ s = latex_string.strip() if s.startswith("$$") and s.endswith("$$"): return s[2:-2].strip() if s.startswith("$") and s.endswith("$"): return s[1:-1].strip() return s def clean(s: str) -> str: """ 对字符串进行预处理,包括全角转半角、去空格等。 """ processed_text = full_to_half_width(s) processed_text = processed_text.replace("{/[}", r" \[").replace("{/]}", r" \]") cleaned_text = clean_latex_delimiters(processed_text) return cleaned_text