使用Sublime正则表达式快速比对和清洗两份文本

夏瑶同学_8580

夏瑶同学_8580

2026-08-30

1000人浏览

原创

sublime中可用正则标记独有行:先分段加#a/#b标记,再替换为#a_only/#b_only;清洗需用(?s)跨行捕获并保留分隔符;验证字段数则用alt+enter查找全部后统计行数。

使用sublime正则表达式快速比对和清洗两份文本

怎么用正则在 Sublime 里快速比对两份文本的差异

Sublime 没有内置 diff 工具,但可以通过正则把「只在 A 有、B 没有」或「只在 B 有、A 没有」的行显式标出来,本质是把比对问题转成「行级存在性判断」。关键不是找相同,而是找缺失。

操作前先把两份文本并排贴进同一个 Sublime 文件,用明显分隔符(比如 === SECTION A === 和 === SECTION B ===)隔开,确保每份文本都是独立段落、无空行混杂。

  • 想标出「A 有但 B 没有」的行:先选中 A 段全部内容 → Ctrl+Shift+L 转为多光标 → 对每个光标所在行,在行尾加一个唯一标记,比如 #A(注意前面有个空格)
  • 再选中 B 段全部内容 → 同样 Ctrl+Shift+L → 行尾加 #B
  • 然后按 Ctrl+H,查找 ^(.*?)( #A)$,替换为 $1 #A_ONLY;再查 ^(.*?)( #B)$,替换为 $1 #B_ONLY
  • 最后搜 #A_ONLY 或 #B_ONLY 就能快速定位独有行

注意:这个方法依赖人工分段和标记,不适合上千行自动比对,但对几十到几百行的手动核对非常直观,且不依赖插件。

清洗时怎么避免把两份文本的共用字段误删

常见错误是写了个宽泛正则(比如 \d{6,})去删 ID,结果把 A 的用户 ID 和 B 的订单号全干掉了——因为没限定上下文。必须靠锚点把匹配范围死死锁在某一段内。

例如,你想只清理 A 段里的邮箱,但 B 段保留原样:

  • 先用 Ctrl+F 定位到 === SECTION A ===,按 Ctrl+Shift+Enter 在它上面插入空行,再按 Ctrl+Enter 在它下面也插一行,让 A 段被空行包围
  • 启用正则模式(Alt+R),查找:(?s)(=== SECTION A ===\r?\n\r?\n)(.*?)(\r?\n\r?\n=== SECTION B ===)
  • 这个正则用 (?s) 开启单行模式,让 .*? 能跨行匹配 A 段全部内容;三个捕获组分别存分隔符、A 段正文、后置分隔符
  • 替换填:$1@#@#@#@#@#@#@#@#@#@0$3(或其他清洗逻辑),这样只动 $2 部分,前后分隔结构完全保留

别省略分隔符捕获组——漏掉 或 ,替换后整个结构就塌了。

Buzzy AI
Buzzy AI

一款AI视频创作工具,主要用于AI视频编辑工具,视频版的Photoshop,适合需要提升相关任务效率的用户。

下载

为什么 ^ 和 $ 在跨段清洗时经常失灵

因为 Sublime 默认的 ^/$ 是「行首/行尾」锚点,但当你用 (?s) 开启单行模式后,. 会匹配换行符,^ 和 $ 却不会自动变成「段首/段尾」——它们仍然只认 `\n` 前后的位置,而你的分隔符可能是 \r\n 或夹着空行,导致锚点漂移。

实操解法只有两个:

  • 不用 ^/$,改用明确字符锚定:比如把 ^ID:\s*\d+ 改成 ID:\s*\d+(?=\r?\n)(后面必须跟换行)
  • 手动统一换行符:右下角点击当前换行格式(如 Windows (CRLF)),切换成 Unix (LF),再用 ^\s*#.*$ 这类经典写法才可靠

中文界面下尤其容易踩这个坑——某些汉化插件会干扰换行符识别,切回 Plain Text 语法(Ctrl+Shift+P → Set Syntax: Plain Text)再试。

清洗后怎么验证两份文本的字段数量是否一致

最直接的方式是用正则批量提取关键字段(如手机号、邮箱、URL),再对比行数。但 Sublime 没有 find_all 函数,得靠「查找全部 + 复制计数」模拟。

例如统计所有邮箱数量:

  • 按 Ctrl+F,输入邮箱正则:[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,},勾选 .* 和 Wrap around
  • 按 Alt+Enter(查找全部),所有匹配项被高亮
  • 按 Ctrl+Shift+P,输入 Copy Selected Text 并执行 —— 此时剪贴板里是所有邮箱,每行一个
  • 新建标签页粘贴,按 Ctrl+Shift+P → Selection: Count Lines(如果装了 Enhanced Selection 插件)或手动看状态栏行数

注意:别用 \b 做词边界,中文混排时它不可靠;用 (? 和 <code>(?!\w) 替代更稳。另外,提取后建议立刻 Ctrl+K Ctrl+U 转小写,避免大小写导致重复计数。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
js正则表达式
js正则表达式

php中文网为大家提供各种js正则表达式语法大全以及各种js正则表达式使用的方法,还有更多js正则表达式的相关文章、相关下载、相关课程,供大家免费下载体验。

2023.06.20

4256

8

正则表达式不包含
正则表达式不包含

正则表达式,又称规则表达式,,是一种文本模式,包括普通字符和特殊字符,是计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串,通常被用来检索、替换那些符合某个模式的文本。php中文网给大家带来了有关正则表达式的相关教程以及文章,希望对大家能有所帮助。

2023.07.05

2781

4

java正则表达式语法
java正则表达式语法

java正则表达式语法是一种模式匹配工具,它非常有用,可以在处理文本和字符串时快速地查找、替换、验证和提取特定的模式和数据。本专题提供java正则表达式语法的相关文章、下载和专题,供大家免费下载体验。

2023.07.05

7662

9

java正则表达式匹配字符串
java正则表达式匹配字符串

在Java中,我们可以使用正则表达式来匹配字符串。本专题为大家带来java正则表达式匹配字符串的相关内容,帮助大家解决问题。

2023.08.11

812

5

正则表达式空格
正则表达式空格

正则表达式空格可以用“\s”来表示,它是一个特殊的元字符,用于匹配任意空白字符,包括空格、制表符、换行符等。本专题为大家提供正则表达式相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.31

520

5

Python爬虫获取数据的方法
Python爬虫获取数据的方法

Python爬虫可以通过请求库发送HTTP请求、解析库解析HTML、正则表达式提取数据,或使用数据抓取框架来获取数据。更多关于Python爬虫相关知识。详情阅读本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.13

673

12

正则表达式空格如何表示
正则表达式空格如何表示

正则表达式空格可以用“\s”来表示,它是一个特殊的元字符,用于匹配任意空白字符,包括空格、制表符、换行符等。想了解更多正则表达式空格怎么表示的内容,可以访问下面的文章。

2023.11.17

386

3

正则表达式中如何匹配数字
正则表达式中如何匹配数字

正则表达式中可以通过匹配单个数字、匹配多个数字、匹配固定长度的数字、匹配整数和小数、匹配负数和匹配科学计数法表示的数字的方法匹配数字。更多关于正则表达式的相关知识详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.12.06

719

7

php正则表达式有哪些
php正则表达式有哪些

php正则表达式有"/pattern/"、"^"、"$"、"."、"[]"、"[^]"、"[a-z]"、"[A-Z]"、"[0-9]"、"\d"、"\D"、"\w"、"\W"、&a

2024.02.23

312

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程