需求
大模型输出的答案中,通常公式格式为latex格式,无法直接在markdown中显示。因此需要:
将LaTeX的块级公式标识符\[...\]替换为Markdown的`$$...$$`,
行内公式标识符`\(...\)`替换为Markdown的`$...$`。
以下代码可以实现上述功能。
思路
- 读取markdown文件
- 使用正则表达式匹配公式内容—使用re库
- 进行替换—使用re.sub函数
- 输出新的markdown内容
代码内容
import re
from pathlib import Path
def convert_latex_to_markdown(text):
# 替换块级公式 $$...$$ 为 $$...$$
text = re.sub(r"\\\[(.*?)\\\]", r'$$\1$$', text, flags=re.DOTALL)
# 替换行内公式 $...$ 为 $...$
text = re.sub(r"\\\((.*?)\\\)", r'$\1$', text, flags=re.DOTALL)
return text
def process_markdown_file(input_path, output_path=None):
# 读取原始文件
with open(input_path, 'r', encoding='utf-8') as f:
original_content = f.read()
# 转换内容
converted_content = convert_latex_to_markdown(original_content)
# 生成输出路径
if not output_path:
input_file = Path(input_path)
output_path = input_file.parent / f"{input_file.stem}_converted{input_file.suffix}"
# 写入新文件
with open(output_path, 'w', encoding='utf-8') as f:
f.write(converted_content)
return output_path
if __name__ == "__main__":
input_path = 'new.md'
output_path = 'output.md'
output_path = process_markdown_file(input_path, output_path)
print(f"Conversion complete! New file saved at: {output_path}")
说明
在 Python 的re
模块中,re.DOTALL
是一个标志(flag),用于修改正则表达式的行为。它的作用是让点号(.
)匹配任何字符,包括换行符(\n
)。
默认情况下:
- 在正则表达式中,点号(
.
)通常匹配任何字符,但不包括换行符。例如,.*
会匹配任意字符(除换行符外),直到遇到换行符为止。
使用re.DOTALL
:
- 当使用
re.DOTALL
标志时,点号(.
)会匹配任何字符,包括换行符。这意味着正则表达式可以跨多行匹配内容。