Python正则表达式实战:从混杂文本中提取结构化信息
在实际项目开发中我们经常需要处理带有特定格式的字符串例如“精彩明星音乐会Apink The Origin 2026年07月16日”。这类字符串通常混合了中文、英文、数字和日期可能来源于用户输入、第三方数据接口或日志文件。直接处理这样的原始字符串会非常棘手我们需要将其解析为结构化的数据以便进行后续的搜索、排序、展示或存储操作。例如从中提取出活动名称“Apink The Origin”、活动类型“音乐会”以及具体的日期“2026-07-16”。本文将以这个具体的字符串为例手把手带你完成一个文本解析与信息提取的实战项目。无论你是刚接触字符串处理的初学者还是需要处理复杂文本格式的中级开发者都能通过本文掌握一套从分析、设计到编码、测试的完整方法。我们将使用 Python 作为主要语言因为它拥有强大的字符串处理和正则表达式库。通过本文你将学会如何设计解析逻辑、编写健壮的代码、处理边界情况并将提取出的信息转换为 JSON 等结构化格式最终构建一个可复用的信息提取工具。1. 理解问题从混杂的字符串中提取结构化信息面对“精彩明星音乐会Apink The Origin 2026年07月16日”这样的字符串我们的第一反应可能是“这看起来像是一个活动标题”。但要让程序理解它我们需要进行更细致的分析。1.1 字符串的构成分析首先我们人工拆解这个字符串识别其可能的组成部分描述性前缀/形容词“精彩”、“明星”。这些词可能描述了活动的性质或级别但不一定是核心信息。活动类型/标签“音乐会”。这是一个关键分类信息。活动主体/名称“Apink The Origin”。这通常是核心信息可能包含英文、中文或混合字符。日期信息“2026年07月16日”。这是一个结构化的时间点是另一个关键信息。在中文环境下这些部分通常直接拼接没有固定的分隔符如空格、逗号。日期格式虽然相对固定YYYY年MM月DD日但其他部分的顺序和内容可能多变例如也可能出现“Apink 2026巡回演唱会 精彩呈现”这样的变体。1.2 定义解析目标与输出结构我们的目标不是写一个只能解析这一个特定字符串的“硬编码”脚本而是设计一个具有一定通用性的解析器。对于这个案例我们设定以下解析目标提取活动名称识别并提取出最核心的活动主体名称如“Apink The Origin”。提取活动类型识别出活动的分类标签如“音乐会”。提取活动日期识别出日期字符串并将其转换为标准的YYYY-MM-DD格式。忽略修饰词对于“精彩”、“明星”这类修饰性词汇在本次解析中可以选择忽略或作为附加信息存储。最终我们希望将提取的信息组织成结构化的数据例如 Python 字典或 JSON 对象方便后续使用。{ event_name: Apink The Origin, event_type: 音乐会, event_date: 2026-07-16, raw_text: 精彩明星音乐会Apink The Origin 2026年07月16日 }1.3 技术选型为什么使用正则表达式对于这类模式相对固定但位置可能灵活的文本提取任务正则表达式Regular Expression是最强大的工具之一。它允许我们通过定义模式来匹配字符串中的特定部分。日期匹配\d{4}年\d{2}月\d{2}日可以精准匹配“2026年07月16日”这种格式。活动类型匹配我们可以定义一个常见活动类型的词库如“音乐会”、“演唱会”、“话剧”、“展览”用(音乐会|演唱会|话剧|展览)来匹配。活动名称提取在匹配并移除日期、活动类型和已知修饰词后剩下的部分很可能就是活动名称。这需要更巧妙的处理。单纯的正则表达式可能无法完美处理所有情况因此我们需要结合字符串的常规方法如split,replace,find和逻辑判断。2. 环境准备与项目初始化在开始编码前我们需要准备好开发环境。本项目对环境要求极低主要依赖 Python 标准库。2.1 环境与工具清单项目要求说明Python 版本3.6 或更高确保re正则表达式库可用。开发工具任意代码编辑器或 IDE如 VS Code, PyCharm, Sublime Text 等。核心库re,datetime,json均为 Python 内置库无需额外安装。可选库pytest用于编写和运行单元测试强烈推荐。2.2 创建项目结构建议创建一个清晰的项目目录以便管理代码、测试和示例。event_parser_project/ ├── event_parser.py # 主解析器模块 ├── test_parser.py # 单元测试文件 ├── requirements.txt # 项目依赖文件本项目可为空或仅包含pytest └── examples/ # 示例和使用脚本 └── demo.py在项目根目录下你可以使用以下命令创建虚拟环境可选但推荐# 创建虚拟环境 python -m venv venv # 激活虚拟环境 (Linux/macOS) source venv/bin/activate # 激活虚拟环境 (Windows) venv\Scripts\activate # 如果需要安装pytest pip install pytest3. 核心解析器设计与实现我们将采用“分而治之”的策略来构建解析器。先处理最容易识别的部分日期再处理类型最后处理名称。3.1 第一步提取并标准化日期日期格式最为规整适合用正则表达式首先提取。提取后我们将其转换为标准的YYYY-MM-DD格式。# event_parser.py import re from datetime import datetime class EventParser: def __init__(self): # 定义匹配“2026年07月16日”格式的正则表达式 self.date_pattern re.compile(r(\d{4})年(\d{1,2})月(\d{1,2})日) # 定义常见活动类型词库 self.event_type_keywords [音乐会, 演唱会, 话剧, 舞台剧, 展览, 发布会, 庆典] def parse_date(self, text): 从文本中提取日期并格式化为 YYYY-MM-DD。 返回 (formatted_date, text_without_date) match self.date_pattern.search(text) if not match: return None, text # 未找到日期返回原文本 year, month, day match.groups() # 格式化日期确保月和日是两位数 try: formatted_date f{int(year):04d}-{int(month):02d}-{int(day):02d} # 验证日期是否有效如防止2月30日 datetime.strptime(formatted_date, %Y-%m-%d) except ValueError: # 如果日期不合法当作未匹配到处理 return None, text # 从原文本中移除已匹配的日期部分 text_without_date self.date_pattern.sub(, text, count1).strip() return formatted_date, text_without_date关键点解释\d{4}匹配4位数字的年份。\d{1,2}匹配1-2位数字的月或日。search方法在字符串中搜索第一个匹配项。sub方法用于将匹配到的日期替换为空字符串count1确保只替换第一个匹配。使用datetime.strptime进行验证可以自动处理非法日期如“2023-02-30”。3.2 第二步识别并提取活动类型移除日期后我们在剩余文本中查找预定义的活动类型关键词。# event_parser.py (续) class EventParser: # ... __init__ 和 parse_date 方法 ... def parse_event_type(self, text): 从文本中识别活动类型。 返回 (event_type, text_without_type) for keyword in self.event_type_keywords: if keyword in text: # 找到类型后将其从文本中移除 # 使用 replace 并指定最大替换次数为1避免重复关键词问题 text_without_type text.replace(keyword, , 1).strip() return keyword, text_without_type return None, text # 未识别到类型为什么用replace(..., , 1)而不是split因为活动类型关键词可能出现在文本的任何位置split通常需要明确的分隔符。replace方法更直接count1参数防止同一个关键词被多次删除虽然概率低。3.3 第三步提取活动名称并清理修饰词这是最具挑战性的一步。在移除了日期和类型后剩下的文本可能包含活动名称和多余的修饰词如“精彩”、“明星”。# event_parser.py (续) class EventParser: # ... 之前的方法 ... def parse_event_name(self, text): 从清理后的文本中提取活动名称。 策略移除已知的修饰词剩余部分作为名称。 # 定义需要过滤的常见修饰词列表可根据业务扩展 modifiers [精彩, 明星, 重磅, 独家, 年度, 盛大] cleaned_text text for mod in modifiers: cleaned_text cleaned_text.replace(mod, ).strip() # 处理可能因移除修饰词产生的多余空格 cleaned_text re.sub(r\s, , cleaned_text).strip() # 如果清理后为空则回退到原始文本或做其他处理 return cleaned_text if cleaned_text else text设计思考 这个方法比较朴素它假设在移除日期、类型和修饰词后剩下的就是名称。这在很多情况下有效但并非万能。对于更复杂的情况可能需要使用更复杂的正则表达式匹配名称模式如首字母大写、引号内的内容。利用自然语言处理NLP进行命名实体识别NER。建立品牌或艺人名称库进行匹配。 本文为保持简洁和聚焦采用朴素的替换法。3.4 第四步整合解析流程现在我们将上述步骤串联起来形成一个完整的解析流程。# event_parser.py (续) class EventParser: # ... 之前的所有方法 ... def parse(self, raw_text): 主解析方法。 输入原始字符串 输出包含解析信息的字典 result { event_name: None, event_type: None, event_date: None, raw_text: raw_text } # 1. 提取日期 date, text_after_date self.parse_date(raw_text) result[event_date] date # 2. 提取活动类型 event_type, text_after_type self.parse_event_type(text_after_date) result[event_type] event_type # 3. 提取活动名称 event_name self.parse_event_name(text_after_type) result[event_name] event_name return result4. 运行验证与结果测试让我们编写一个简单的脚本来测试我们的解析器并查看其输出。4.1 基础功能测试创建一个demo.py文件来运行解析器。# examples/demo.py import sys import os sys.path.insert(0, os.path.dirname(os.path.dirname(__file__))) # 添加父目录到路径 from event_parser import EventParser def main(): parser EventParser() test_string 精彩明星音乐会Apink The Origin 2026年07月16日 parsed_result parser.parse(test_string) print(原始字符串:, test_string) print(\n解析结果:) # 使用 json.dumps 美化输出 import json print(json.dumps(parsed_result, ensure_asciiFalse, indent2)) if __name__ __main__: main()运行这个脚本python examples/demo.py预期输出原始字符串: 精彩明星音乐会Apink The Origin 2026年07月16日 解析结果: { event_name: Apink The Origin, event_type: 音乐会, event_date: 2026-07-16, raw_text: 精彩明星音乐会Apink The Origin 2026年07月16日 }成功我们成功地将一个混杂的字符串分解成了结构化的数据。4.2 编写单元测试确保健壮性为了确保解析器在面对不同输入时仍能正确工作或者在我们修改代码后不会破坏原有功能编写单元测试至关重要。# test_parser.py import pytest from event_parser import EventParser pytest.fixture def parser(): return EventParser() def test_parse_standard_case(parser): 测试标准用例 result parser.parse(精彩明星音乐会Apink The Origin 2026年07月16日) assert result[event_name] Apink The Origin assert result[event_type] 音乐会 assert result[event_date] 2026-07-16 def test_parse_without_date(parser): 测试没有日期的情况 result parser.parse(周末音乐会) assert result[event_date] is None assert result[event_type] 音乐会 # 名称可能包含“周末”因为“周末”不在我们的修饰词列表中 assert 周末 in result[event_name] def test_parse_without_type(parser): 测试没有已知活动类型的情况 result parser.parse(Apink粉丝见面会 2025年10月1日) assert result[event_type] is None assert result[event_date] 2025-10-01 assert result[event_name] Apink粉丝见面会 def test_parse_invalid_date(parser): 测试非法日期应被忽略 result parser.parse(音乐会 2023年02月30日) assert result[event_date] is None assert result[event_type] 音乐会 def test_parse_name_with_punctuation(parser): 测试名称中包含标点 result parser.parse(【重磅】Taylor Swift - The Era Tour 演唱会 2024年05月20日) # 注意我们的简单修饰词过滤可能处理不了“【重磅】” # 这是一个已知限制测试用于提醒我们 assert Taylor Swift - The Era Tour in result[event_name] assert result[event_type] 演唱会 assert result[event_date] 2024-05-20 if __name__ __main__: pytest.main([__file__, -v])使用 pytest 运行测试pytest test_parser.py -v这些测试能帮助我们快速发现解析逻辑的边界问题。5. 常见问题排查与优化策略在实际使用中你可能会遇到各种预料之外的情况。下面列出一些常见问题及其排查思路。5.1 解析结果不准确或为空问题现象可能原因检查与解决思路event_name为空或包含多余词1. 修饰词列表不完整。2. 日期或类型正则匹配过于贪婪吞掉了名称部分。3. 名称本身包含特殊字符或空格处理不当。1. 打印每一步处理后的中间文本 (text_after_date,text_after_type)观察是哪个环节出错。2. 扩充modifiers列表。3. 检查正则表达式确保sub替换时没有过度匹配。event_type识别失败1. 活动类型不在event_type_keywords列表中。2. 字符串中存在类似但不同的词如“音乐节” vs “音乐会”。1. 根据业务数据丰富类型关键词库。2. 考虑使用模糊匹配或关键词包含关系如判断“音乐”是否在字符串中。event_date识别失败1. 日期格式不符如“2026/07/16”、“07-16-2026”。2. 日期字符串中有多余空格或字符。1. 支持多种日期格式的正则表达式例如r(\d{4})[-/年](\d{1,2})[-/月](\d{1,2})[日号]?。2. 在匹配前对文本进行预处理移除无关空格。英文大小写或空格问题名称中的英文单词可能被意外拆分或连接。在parse_event_name清理文本后进行额外的空格规范化re.sub(r\s, , text).strip()。5.2 性能与扩展性考虑当前实现采用顺序匹配和循环替换对于单次解析或少量数据没有问题。如果需要对海量文本进行解析需要考虑预编译正则表达式我们已经做了self.date_pattern re.compile(...)这能提升性能。优化关键词查找如果event_type_keywords和modifiers列表变得很长循环查找效率低。可以考虑使用集合set进行in操作速度更快。对于类型识别可以将所有关键词用|连接成一个大的正则表达式一次性匹配。处理不确定性当前算法是确定性的但真实数据可能有歧义。例如“2024张学友演唱会”中“张学友”是名称“演唱会”是类型很好解析。但“古典音乐音乐会”中“古典音乐”是名称的一部分还是修饰词这需要更复杂的规则或机器学习模型。5.3 代码健壮性增强建议输入验证在parse方法开始处检查输入是否为字符串且非空。def parse(self, raw_text): if not isinstance(raw_text, str): raise ValueError(Input must be a string) if not raw_text.strip(): return {**self._empty_result, raw_text: raw_text} # 返回空结果 # ... 后续解析逻辑日志记录在关键步骤添加日志便于调试。特别是当解析失败或得到意外结果时记录下中间状态。返回默认值为解析器设置合理的默认值避免返回None导致上层调用报错。配置化将event_type_keywords和modifiers列表移到配置文件如 JSON、YAML或数据库这样无需修改代码即可更新规则。6. 最佳实践与扩展方向6.1 生产环境部署清单如果计划将此解析器用于生产环境请检查以下清单[ ]输入清洗确保传入的文本已经过基本的清理去除首尾空白、特殊不可见字符等。[ ]编码处理确保文本编码统一如 UTF-8避免乱码导致匹配失败。[ ]错误处理使用try...except包裹核心解析逻辑捕获未预期的异常并返回一个包含错误信息的默认结果而不是让程序崩溃。[ ]性能监控记录解析耗时如果平均耗时过高需要分析瓶颈。[ ]规则管理将可变的匹配规则关键词、正则模式外部化实现热更新。[ ]结果验证对解析出的日期进行合理性校验如不能是过去很久的日期或未来的极限日期根据业务设定阈值。6.2 扩展解析器能力你可以根据实际需求轻松扩展此解析器的功能提取地点信息很多活动标题包含地点如“北京国家大剧院”。可以添加地点关键词库或正则模式来匹配。提取票价或状态匹配如“票价280元”、“预售中”、“已售罄”等模式。处理多日期有些活动包含多天如“2026年07月16日-07月18日”。需要修改日期正则表达式来捕获日期范围。集成NLP服务对于极其不规则或复杂的文本可以调用云服务如阿里云、腾讯云的NLP实体识别API作为后备方案当规则解析失败时使用。构建管道将解析器设计成可插拔的组件管道每个组件负责提取一类信息方便维护和扩展。6.3 针对类似“Apink The Origin”文本的特别处理本例中活动名称是英文。如果业务中大量出现外文名称需要注意名称中可能包含,-,:等符号在清理文本时要小心不要误删。可以考虑在清理修饰词后将连续的非中文、非空格、非数字序列识别为外文名称片段。建立一个常见的艺人、团体或品牌名称白名单能极大提升名称提取的准确率。通过这个项目我们不仅完成了一个针对特定字符串的解析工具更掌握了一套处理非结构化文本信息的通用方法分析模式、定义规则、逐步提取、验证结果、处理异常。下次当你遇到“XX发布会2025年3月于上海举行”或“限时优惠iPhone 16 预售开启”这类文本时相信你能够快速设计出相应的解析方案。

相关新闻

5分钟免费解锁WeMod Pro会员:Wand-Enhancer完整使用教程

5分钟免费解锁WeMod Pro会员:Wand-Enhancer完整使用教程

5分钟免费解锁WeMod Pro会员:Wand-Enhancer完整使用教程 【免费下载链接】Wand-Enhancer Advanced UX and interoperability extension for Wand (WeMod) app 项目地址: https://gitcode.com/GitHub_Trending/we/Wand-Enhancer Wand-Enhancer是一款专为WeMod…

2026/9/26 21:12:57 阅读更多 →
终极指南:3步快速找回7z/Zip/Rar压缩包密码的完整解决方案

终极指南:3步快速找回7z/Zip/Rar压缩包密码的完整解决方案

终极指南:3步快速找回7z/Zip/Rar压缩包密码的完整解决方案 【免费下载链接】ArchivePasswordTestTool 利用7zip测试压缩包的功能 对加密压缩包进行自动化测试密码 项目地址: https://gitcode.com/gh_mirrors/ar/ArchivePasswordTestTool 你是否曾因忘记压缩包…

2026/10/9 17:52:25 阅读更多 →
2026东莞雷克萨斯ES200二次升级观察:东莞杰之声如何重新组织车内声场

2026东莞雷克萨斯ES200二次升级观察:东莞杰之声如何重新组织车内声场

从器材分工、门板施工到调音交付,记录一台ES200的二次升级 一、为什么这台ES200需要二次升级 雷克萨斯ES200本身强调舒适和安静,车内听音乐的频率并不低。对于已经做过一次升级、但仍希望改善低频下潜、声场连贯性和细节表现的车主来说,二次…

2026/9/27 22:49:52 阅读更多 →

最新新闻

冷链夜班多,司机作息和疲劳驾驶怎么管?常见做法答疑

冷链夜班多,司机作息和疲劳驾驶怎么管?常见做法答疑

冷链夜班多,司机作息和疲劳驾驶怎么管?常见做法答疑冷链时效卡得死,水产、果蔬、商超配货大量走夜路,疲劳驾驶是这个行业真正的大风险。困了还硬撑,不光是违章,反应慢半拍就是事故,一车货和人都…

2026/10/10 21:15:02 阅读更多 →
冷链消毒台账记什么?车辆冷库消毒记录的栏目和留存

冷链消毒台账记什么?车辆冷库消毒记录的栏目和留存

冷链消毒台账记什么?车辆冷库消毒记录的栏目和留存冷链车辆、冷库、器具按要求做了消毒,检查时拿什么证明?靠的就是消毒台账。消毒做了但记不清、对不上,等于没留凭证。台账不是给作业人员增加负担,而是把“什么时候、…

2026/10/10 21:15:02 阅读更多 →
本地LLM记忆模块设计:轻量级SQLite实现上下文持久化

本地LLM记忆模块设计:轻量级SQLite实现上下文持久化

1. 项目概述:一个被误读的命名,实则指向本地化AI记忆机制的实践探索“claude-mem”这个词最近在技术圈里冒头,很多人第一反应是“这是不是Claude官方新出的记忆功能?”——其实不是。它既不是Anthropic发布的正式产品,…

2026/10/10 21:15:02 阅读更多 →
新冷库新冷藏车怎么测?温度分布验证的布点与步骤

新冷库新冷藏车怎么测?温度分布验证的布点与步骤

新冷库新冷藏车怎么测?温度分布验证的布点与步骤新冷库建好、新冷藏车上路,光看温控器显示正常不够,得做一次温度分布验证,确认每个角落都压得住温。不验证就用,死角、门口、最远点出了问题,事后才发现货受…

2026/10/10 21:15:02 阅读更多 →
读懂Linux ELF格式:从程序加载到动态链接的底层原理

读懂Linux ELF格式:从程序加载到动态链接的底层原理

写程序这行当干久了,你会发现一个挺有意思的现象:不管你是写C、写Rust、写Go还是写汇编,只要你在Linux上把程序跑起来,内核看到的都是同一种"容器"。这个容器就是ELF格式。我最初接触它是因为一个诡异的线上问题&#x…

2026/10/10 21:15:02 阅读更多 →
Python爬虫实战:抓取中国天气网七日预报并导出CSV

Python爬虫实战:抓取中国天气网七日预报并导出CSV

上周一个朋友问我说,他常跑的城市比较固定,能不能把未来一周的天气整理成一张表,出门前扫一眼就够。我说这需求听着就该交给爬虫来干。于是就有了这个项目:用 Python 爬虫抓中国天气网的七日预报页面,解析出全国城市的…

2026/10/10 21:14:02 阅读更多 →

日新闻

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

1. 从“卫星轨道分类”这个标题说起:为什么值得花时间搞懂第一次接触“卫星轨道分类”这个概念,很多人会觉得它离自己很远——不就是天上的星星怎么转吗?但如果你正在做航天任务规划、遥感数据接收、星座设计,甚至只是准备一场航天…

2026/10/10 0:00:39 阅读更多 →
Spring AOP 核心原理与实战:从概念到日志切面落地

Spring AOP 核心原理与实战:从概念到日志切面落地

1. 从一个真实痛点说起:为什么你的代码里到处都是重复逻辑刚入行那会儿,我写过一个用户管理模块,注册、登录、改密码、注销四个接口。每个接口里都塞了几乎一样的日志打印、参数校验、事务开启和提交。当时觉得没什么,能跑就行。直…

2026/10/10 0:00:40 阅读更多 →
Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

简介:这是一套面向计算机相关专业学生与项目实战学习者的Python数据采集与分析可视化完整项目,以Boss直聘岗位数据为对象,适合用作毕业设计、课程设计或期末大作业。资源包共38个文件,约246KB,以13个py源码文件为核心&…

2026/10/10 0:00:40 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 11:14:25 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 1:36:08 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 11:14:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 5:23:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 10:38:42 阅读更多 →