# 将html转换为markdown
def html_to_markdown(html):
# 移除HTML标签
text = re.sub(r'</?[^>]+>', '', html)
text = unescape(text) # 解码HTML实体
# 移除<style>和<script>标签及其内容
text = re.sub(r'<style>.*?</style>', '', text, flags=re.DOTALL)
text = re.sub(r'<script>.*?</script>', '', text, flags=re.DOTALL)
# 将换行符替换为两个空格
text = re.sub(r'\n', ' ', text)
# 将两个或更多连续空格替换为一个空格
text = re.sub(r' +', ' ', text)
# 将标题替换为Markdown格式
text = re.sub(r'<h1>(.*?)</h1>', r'# \1', text)
text = re.sub(r'<h2>(.*?)</h2>', r'## \1', text)
text = re.sub(r'<h3>(.*?)</h3>', r'### \1', text)
text = re.sub(r'<h4>(.*?)</h4>', r'#### \1', text)
text = re.sub(r'<h5>(.*?)</h5>', r'##### \1', text)
text = re.sub(r'<h6>(.*?)</h6>', r'###### \1', text)
# 将链接替换为Markdown格式
text = re.sub(r'<a href="(.*?)">(.*?)</a>', r'[\2](\1)', text)
# 将有序列表替换为Markdown格式
text = re.sub(r'<ol>\s*(<li>(.*?)</li>)\s*</ol>', lambda m: "".join(f"{i+1}. {v}" for i, v in enumerate([x[1] for x in re.findall(r'<li>(.*?)</li>', m.group(0))])), text)
# 将无序列表替换为Markdown格式
text = re.sub(r'<ul>\s*(<li>(.*?)</li>)\s*</ul>', lambda m: "".join(f"- {v}" for v in [x[1] for x in re.findall(r'<li>(.*?)</li>', m.group(0))]), text)
# 将粗体文本替换为Markdown格式
text = re.sub(r'<b>(.*?)</b>', r'**\1**', text)
# 将斜体文本替换为Markdown格式
text = re.sub(r'<i>(.*?)</i>', r'*\1*', text)
# 将代码块替换为Markdown格式
text = re.sub(r'<pre><code>(.*?)</code></pre>', r'```\n\1\n```', text, flags=re.DOTALL)
# 将水平分割线替换为Markdown格式
text = re.sub(r'<hr/?>', r'---', text)
return text