当前位置: 首页 > article >正文

html表格转换为markdown

文章目录

        • 工具功能亮点
        • 1.核心实现解析
          • 1. 剪贴板交互
          • 2. HTML检测与提取
          • 3. 转换规则设计
        • 2. 完整代码

在日常工作中,我们经常遇到需要将网页表格快速转换为Markdown格式的场景。无论是文档编写、知识整理还是数据迁移,手动转换既耗时又容易出错。本文将介绍一个基于Go语言开发的轻量级工具,它能自动从剪贴板提取HTML表格并转换为Markdown格式。


工具功能亮点
  1. 一键转换:直接读取剪贴板中的HTML内容
  2. 智能识别:自动检测并提取首个HTML表格
  3. 格式优化:保留表格结构并添加Markdown语法
  4. 无缝衔接:结果自动写回剪贴板

1.核心实现解析
1. 剪贴板交互
// 读取剪贴板内容
content, err := clipboard.ReadAll()// 将结果写回剪贴板
err = clipboard.WriteAll(markdown)

使用atotto/clipboard库实现跨平台剪贴板操作,无需文件中间步骤。

2. HTML检测与提取
func isHTML(s string) bool {return strings.Contains(s, "<table") || strings.Contains(s, "<tr")
}func extractFirstTable(html string) string {start := strings.Index(html, "<table")end := strings.Index(html[start:], "</table>")return html[start:start+end+8] // 截取完整table标签
}

通过简单高效的字符串扫描定位表格位置,避免复杂解析。

3. 转换规则设计
converter.AddRules(md.Rule{Filter: []string{"table", "tr", "td", "th"},Replacement: func(content string, selec *goquery.Selection) *string {if selec.Is("tr") {return md.String("|" + content + "|\n")}if selec.Is("td") {return md.String(strings.TrimSpace(content) + "|")}// 其他元素处理...}
})

关键转换逻辑:

  • tr 转换为行:|内容|
  • td/th 转换为单元格:内容|
  • 自动添加表头分隔线:|---|---|

2. 完整代码
package mainimport ("fmt""log""os""strings"md "github.com/JohannesKaufmann/html-to-markdown""github.com/PuerkitoBio/goquery""github.com/atotto/clipboard"
)func main() {// 读取剪贴板内容content, err := clipboard.ReadAll()if err != nil {log.Fatal("读取剪贴板失败:", err)}// 检查是否为HTML内容if !isHTML(content) {fmt.Println("剪贴板内容不是HTML格式")os.Exit(0)}// 提取第一个表格tableHTML, err := extractFirstTable(content)if err != nil {log.Fatal("提取表格失败:", err)}if tableHTML == "" {fmt.Println("未找到HTML表格")os.Exit(0)}// 转换为Markdownconverter := md.NewConverter("", true, nil)// 添加表格转换规则converter.AddRules(md.Rule{Filter: []string{"table", "tr", "td", "th"},Replacement: func(content string, selec *goquery.Selection, opt *md.Options) *string {if selec.Is("table") {// 添加表头分隔线rows := strings.Split(strings.TrimSpace(content), "\n")if len(rows) > 1 {header := rows[0]cols := strings.Count(header, "|") - 1separator := "|" + strings.Repeat("---|", cols)// 合并所有行,确保每行数据单独显示content = strings.Join(append([]string{header, separator}, rows[1:]...), "\n") + "\n"}return &content}if selec.Is("tr") {content = "|" + strings.TrimRight(content, "|") + "|\n"return &content}if selec.Is("th") || selec.Is("td") {content = strings.ReplaceAll(content, "\n", "<br>")content = strings.TrimSpace(content) + "|"return &content}return nil},},)markdown, err := converter.ConvertString(tableHTML)if err != nil {log.Fatal("转换Markdown失败:", err)}// 输出结果到控制台fmt.Println("转换后的Markdown表格:")fmt.Println(markdown)// 将结果写入剪贴板err = clipboard.WriteAll(markdown)if err != nil {log.Fatal("写入剪贴板失败:", err)}fmt.Println("已成功将Markdown表格写入剪贴板")
}// isHTML 检查字符串是否是HTML格式
func isHTML(s string) bool {return strings.Contains(strings.ToLower(s), "<html") ||strings.Contains(strings.ToLower(s), "<table") ||strings.Contains(strings.ToLower(s), "<tr") ||strings.Contains(strings.ToLower(s), "<td")
}// extractFirstTable 从HTML中提取第一个表格
func extractFirstTable(html string) (string, error) {// 简单的提取逻辑,实际应用中可能需要更复杂的HTML解析start := strings.Index(strings.ToLower(html), "<table")if start == -1 {return "", nil}end := strings.Index(strings.ToLower(html[start:]), "</table>")if end == -1 {return "", nil}return html[start : start+end+8], nil // +8 是 </table> 的长度
}

相关文章:

html表格转换为markdown

文章目录 工具功能亮点1.核心实现解析1. 剪贴板交互2. HTML检测与提取3. 转换规则设计 2. 完整代码 在日常工作中&#xff0c;我们经常遇到需要将网页表格快速转换为Markdown格式的场景。无论是文档编写、知识整理还是数据迁移&#xff0c;手动转换既耗时又容易出错。本文将介绍…...

VsCode 安装 Cline 插件并使用免费模型(例如 DeepSeek)

当前时间为 25/6/3&#xff0c;Cline 版本为 3.17.8 点击侧边栏的“扩展”图标 在搜索框中输入“Cline” 找到 Cline 插件&#xff0c;然后点击“安装” 安装完成后&#xff0c;Cline 图标会出现在 VS Code 的侧边栏中 点击 Use your own API key API Provider 选择 OpenRouter…...

短视频矩阵系统源码新发布技术方案有那几种?

短视频矩阵运营在平台政策频繁更迭的浪潮中&#xff0c;已成为内容分发的核心战场。行业领先者如筷子科技、云罗抖去推、超级编导等平台&#xff0c;其稳定高效的代发能力背后&#xff0c;离不开前沿技术方案的强力支撑。本文将深入剖析当前主流的六大短视频矩阵系统代发解决方…...

React 第五十二节 Router中 useResolvedPath使用详解和注意事项示例

前言 useResolvedPath 是 React Router v6 提供的一个实用钩子&#xff0c;用于解析给定路径为完整路径对象。 它根据当前路由上下文解析相对路径&#xff0c;生成包含 pathname、search 和 hash 的完整路径对象。 一、useResolvedPath 核心用途 路径解析&#xff1a;将相对…...

【PmHub面试篇】性能监控与分布式追踪利器Skywalking面试专题分析

你好&#xff0c;欢迎来到本次关于PmHub整合性能监控与分布式追踪利器Skywalking的面试系列分享。在这篇文章中&#xff0c;我们将深入探讨这一技术领域的相关面试题预测。若想对相关内容有更透彻的理解&#xff0c;强烈推荐参考之前发布的博文&#xff1a;【PmHub后端篇】Skyw…...

Cursor快速梳理ipynb文件Prompt

1. 整体鸟瞰 请在不运行代码的前提下&#xff0c;总结 <文件名.ipynb> 的主要目的、核心逻辑流程和输出结果。阅读整个项目目录&#xff0c;列出每个 .ipynb / .py 文件的角色&#xff0c;以及它们之间的数据依赖关系&#xff08;输入→处理→输出&#xff09;。2. 结构…...

天机学堂-分页查询

需求 分页查询我的课表 返回&#xff1a; 总条数、总页数、当前页的课表信息的集合 返回的VO&#xff08;已经封装成统一的LearningLessonsVO&#xff09; 定义Controller RestController RequestMapping("/lessons") RequiredArgsConstructor public class Lear…...

业态即战场:零售平台的生意模型与系统设计解构

目录 一、当我们在电商买菜、点外卖时,其实是零售业态在进化 (一)从“商场选货”到“算法推货”:零售的时代已经不同 (二)“控货”和“卖场”——零售的两种基本商业模式 二、四种经典零售业态解析:控货 vs 卖场,地面 vs 线上 (一)地面控货零售:直营模式的黄金…...

微算法科技(NASDAQ:MLGO)基于信任的集成共识和灰狼优化(GWO)算法,搭建高信任水平的区块链网络

随着数字化转型的加速&#xff0c;区块链技术作为去中心化、透明且不可篡改的数据存储与交换平台&#xff0c;正逐步渗透到金融、供应链管理、物联网等多个领域&#xff0c;探索基于信任的集成共识机制&#xff0c;并结合先进的优化算法来提升区块链网络的信任水平&#xff0c;…...

全新Xsens Animate版本是迄今为止最大的软件升级,提供更清晰的数据、快捷的工作流程以及从录制开始就更直观的体验

我们整合了专业人士喜爱的 Xsens 动捕功能&#xff0c;并使其更加完善。全新Xsens Animate版本是我们迄今为止最大的软件升级&#xff0c;旨在提供更清晰的数据、更快捷的工作流程以及从录制开始就更直观的体验。 从制作游戏动画到流媒体直播头像或构建实时电影内容&#xff0…...

大语言模型评测体系全解析(下篇):工具链、学术前沿与实战策略

文章目录 一、评测工具链&#xff1a;从手工测试到自动化工程的效率革命&#xff08;一&#xff09;OpenCompass&#xff1a;开源评测框架的生态构建1. 技术架构&#xff1a;三层架构实现评测自动化2. 开发者赋能&#xff1a;从入门到进阶的工具矩阵 &#xff08;二&#xff09…...

python打卡day46@浙大疏锦行

知识点回顾&#xff1a; 不同CNN层的特征图&#xff1a;不同通道的特征图什么是注意力&#xff1a;注意力家族&#xff0c;类似于动物园&#xff0c;都是不同的模块&#xff0c;好不好试了才知道。通道注意力&#xff1a;模型的定义和插入的位置通道注意力后的特征图和热力图 内…...

C++.OpenGL (1/64) 创建窗口(Hello Window)

OpenGL 创建窗口(Hello Window) 步骤详解与代码实现 #mermaid-svg-436DlGvysFQogISc {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-436DlGvysFQogISc .error-icon{fill:#552222;}#mermaid-svg-436DlGvysFQogISc…...

Excel 发现此工作表中有一处或多处公式引用错误。请检查公式中的单元格引用、区域名称、已定义名称以及到其他工作簿的链接是否均正确无误。弹窗

Excel 提示“发现此工作表中有一处或多处公式引用错误”通常表示公式中存在无效引用。以下是系统化的检查步骤&#xff0c;帮助你定位和修复问题&#xff1a; 1. 检查单元格引用&#xff1a; 无效单元格引用&#xff1a;检查公式中的单元格地址&#xff08;如 A1、B10&…...

NVIDIA DRIVE AGX平台:引领智能驾驶安全新时代

随着科技的不断进步&#xff0c;汽车行业正迎来前所未有的变革&#xff0c;智能驾驶技术成为全球产业竞相布局的焦点之一。然而&#xff0c;这场技术革命的背后&#xff0c;最关键且被广泛关注的是安全性问题。近日&#xff0c;我认真研读了NVIDIA发布的《自动驾驶安全报告》白…...

推荐12个wordpress企业网站模板

WordPress企业网站模板是一种专为企业网站设计的WordPress主题&#xff0c;旨在帮助企业创建专业、美观且易于管理的网站。这些模板通常具备响应式设计、SEO优化、多语言支持等功能&#xff0c;能够满足不同行业和企业的需求。 WordPress企业网站模板的适用场景 企业官网&…...

沙市区举办资本市场赋能培训会 点赋科技分享智能消费新实践

荆州市沙市区&#xff0c;2025年6月5日—— 在沙市区政府主办的“发挥区域性股权市场功能&#xff0c;助力企业拥抱资本市场”专题培训会上&#xff0c;区委副书记、区长郭熙胜强调要充分发挥资本市场服务实体经济功能&#xff0c;推动本土创新企业高质量发展。区内重点企业点赋…...

Docker 容器化基础:镜像、容器与仓库的本质解析

Docker 概念与容器化技术 Docker 是一种容器化平台&#xff0c;能够将应用程序及其依赖项打包成一个容器&#xff0c;确保在任何环境中都能一致运行。容器化技术通过操作系统级别的虚拟化&#xff0c;为应用程序提供了一个独立的运行环境。 容器化技术的核心优势 一致性&…...

九.C++ 对引用的学习

一.基本概念 引用即内存的别名 int a 10; int& b a; 引用本身不占用内存&#xff0c;并非实体&#xff0c;对引用的所有操作都是在对目标内存进行操作 引用必须初始化&#xff0c;且不能更换对象 int c 5; b c; // 仅仅是在对引用的目标内存进行赋值 #include <ios…...

探秘鸿蒙 HarmonyOS NEXT:实战用 CodeGenie 构建鸿蒙应用页面

在开发鸿蒙应用时&#xff0c;你是否也曾为一个页面的布局反复调整&#xff1f;是否还在为查 API、写模板代码而浪费大量时间&#xff1f;今天带大家实战体验一下鸿蒙官方的 AI 编程助手——CodeGenie&#xff08;代码精灵&#xff09; &#xff0c;如何从 0 到 1 快速构建一个…...

art-pi2 上手记录(二)

功能比较庞杂&#xff0c;写得不好&#xff0c;抛砖引玉 预备知识 stm32 默认从主闪存0x08000000启动 art-pi2的psram 映射0x90000000 art-pi2的8线ospi flash 映射0x70000000 stm32h7比较灵活&#xff0c;通过修改选项字节&#xff0c;可以实现从 0x0000 0000 到 0x3FFF 0…...

数据库SQLite基础

SQLite的存储结构 --->B树 大型数据库 &#xff1a;Oracle 中型数据库 &#xff1a;Server是微软开发的数据库产品&#xff0c;主要支持windows平台 小型数据库 : MySQL是一个小型关系型数据库管理系统。开放源码 (嵌入式不需要存储太多数据) 一、SQLite基础 SQLite的源代码…...

1.3 古典概型和几何概型

文章目录 古典概型模型(等可能模型)几何概型 古典概型模型(等可能模型) 两个条件&#xff1a; 1) 有限个样本点 2) 等可能性 例题&#xff1a; 设有n个人&#xff0c;每个人都等可能地被分配到N个房间中的任一间(n≤N)&#xff0c; 求下列事件的概率: (1)某指定的n间房…...

html-pre标签

我们都知道在常见标签里面的文字的格式是不会显示的&#xff0c;比如你打了多个空格&#xff0c;但却不会显示&#xff0c;而pre标签会显示。 主要特点&#xff1a; 保留空格和换行&#xff1a;在 <pre> 标签内&#xff0c;HTML 会保留所有的空格、换行符和制表符等格式…...

【WPF】WPF 项目实战:用ObservableCollection构建一个可增删、排序的管理界面(含源码)

&#x1f4a1;WPF 项目实战&#xff1a;构建一个可增删、排序的光源类型管理界面&#xff08;含源码&#xff09; 在实际的图像处理项目中&#xff0c;我们经常需要对“光源类型”进行筛选或管理。今天我们来一步步构建一个实用的 WPF 界面&#xff0c;实现以下功能&#xff1…...

MCU_IO驱动LED

注意事项&#xff1a; 1、亮度要求较高的情况下&#xff0c;不能由IO直接驱动LED MCU_IO引脚输出的电压和电流较弱&#xff0c;如果对光的亮度有要求的话&#xff0c;需要使用三极管来驱动。 MCU_IO的电压一般为3.3V或者5V&#xff0c;输出电流一般10mA-25mA。 2、不同颜色…...

上门预约行业技术方案全解析:小程序、App还是H5?如何选择?

上门按摩行业这几年确实火&#xff0c;但千万别以为随便买个系统、招几个技师就能赚钱。作为一家深耕10年软件开发的公司&#xff0c;我们做了四五年上门按摩系统&#xff0c;见过太多人头脑一热冲进来&#xff0c;结果血本无归。 如果你真的想做上门按摩&#xff0c;先想清楚这…...

Java 集合面试题 PDF 及常见考点解析与备考指南

为了帮助你更好地学习Java集合相关知识&#xff0c;我将围绕Java集合面试题展开&#xff0c;介绍常见的技术方案及应用实例。这些内容涵盖了集合框架的基本概念、常见集合类的特点与使用场景&#xff0c;以及在实际开发中可能遇到的问题及解决方案。 Java集合面试题&#xff1…...

Java 大视界 -- 基于 Java 的大数据分布式计算在蛋白质组学数据分析中的加速与优化(255)

&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎来到 青云交的博客&#xff01;能与诸位在此相逢&#xff0c;我倍感荣幸。在这飞速更迭的时代&#xff0c;我们都渴望一方心灵净土&#xff0c;而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识&#xff0c;也…...

如何通过外网访问内网?哪个方案比较好用?跨网远程连接网络知识早知道

广域网&#xff08;英语&#xff1a;Wide Area Network&#xff0c;缩写为 WAN&#xff09;&#xff0c;又称外网、公网。是连接不同地区局域网或城域网计算机通信的远程网。 局域网(LAN)&#xff0c;全称为Local Area Network&#xff0c;指在较小的地理区域内&#xff0c;通…...