Sublime Text 3 正则表达式实战:用 [\s\S]+? 轻松清理小说TXT里的跨行垃圾信息
每次从网上下载TXT小说,最头疼的就是那些乱七八糟的版权声明、广告信息和格式混乱的排版。这些内容不仅影响阅读体验,还经常横跨多行,手动删除简直是一场噩梦。今天我们就来聊聊如何用Sublime Text 3的正则表达式功能,特别是[\s\S]+?这个神器,一键清理这些烦人的跨行垃圾信息。
1. 准备工作与环境配置
在开始之前,确保你已经安装了Sublime Text 3。这个轻量级但功能强大的文本编辑器是处理文本的绝佳工具,特别是它的正则表达式搜索替换功能,比记事本强大太多。
打开你的小说TXT文件,应该能看到类似这样的内容:
※版本出处:旧雨阁扫校※ 上一页回目录下一页 lwj@cser 制作更多精彩E书请访问"wbzd" 2009年10月12日 星期一 2:43:17 PM 《旧派武侠合集》lwj@cser制作 2009.8 江湖奇侠传 - 第三十二回 惊变卦孝子急亲仇 污佛地淫徒受重创 目录 白莲英雄传 偷拳 荒江女侠 江湖怪异传 江湖奇侠传 近代侠义英雄传 沉剑飞龙记 蓝田女侠 鹰爪王 罗刹夫人 七杀碑 制作说明 使用说明 《江湖奇侠传》平江不肖生·著这些信息通常以"※版本出处"开头,以"·著"结尾,中间夹杂着各种广告、联系方式和日期,横跨多行。我们的目标就是精准定位并删除这些内容,同时保留小说正文。
2. 理解正则表达式基础概念
在动手之前,我们需要理解几个关键的正则表达式概念:
\s:匹配任何空白字符,包括空格、制表符、换行符等*:匹配前面的元素零次或多次+:匹配前面的元素一次或多次?:使量词变为非贪婪模式(尽可能少匹配)^:匹配行的开头$:匹配行的结尾[\s\S]:匹配任何字符,包括换行符(相当于"."的加强版)
特别需要注意的是.在正则表达式中默认不匹配换行符,这就是为什么我们需要使用[\s\S]来处理跨行内容。
3. 构建跨行匹配模式
现在我们来构建能够匹配这些跨行垃圾信息的正则表达式。观察这些内容,它们通常有以下几个特征:
- 以多个空格加"※版本出处"开头
- 以"·著"结尾
- 中间包含任意字符(包括换行符)
基于这些特征,我们可以写出以下正则表达式:
^\s*※版本出处[\s\S]+?·著$让我们分解这个表达式:
^\s*:匹配行开头的任意数量空白字符※版本出处:匹配固定的开头字符串[\s\S]+?:非贪婪匹配任意字符(包括换行符)一次或多次·著$:匹配固定的结尾字符串
关键点在于[\s\S]+?中的?,它使匹配变为非贪婪模式,确保我们只匹配到第一个"·著"就停止,而不是一直匹配到文档末尾的"·著"。
4. 在Sublime Text中执行替换
现在让我们在Sublime Text中实际操作:
- 打开你的TXT小说文件
- 按下
Ctrl+H打开查找替换面板 - 确保正则表达式按钮被选中(.*图标)
- 在查找框中输入:
^\s*※版本出处[\s\S]+?·著$ - 替换框留空
- 点击"Replace All"按钮
执行后,所有匹配的跨行垃圾信息都会被删除。你可以通过Ctrl+Z撤销操作来确认效果。
5. 处理替换后的多余空行
删除大段文本后,往往会留下很多多余的空行。我们可以再用一个简单的正则表达式来清理:
- 在查找框中输入:
^\s*\n - 替换框留空
- 点击"Replace All"
这个表达式会匹配所有只包含空白字符的行(包括空行),并将其删除。
6. 高级技巧与注意事项
在实际操作中,你可能会遇到一些特殊情况:
变体匹配:有些垃圾信息可能使用"※出处"而非"※版本出处"。这时可以使用
※(版本)?出处来匹配两种形式。更精确的匹配:如果担心误删正文,可以限制匹配长度,例如
[\s\S]{1,200}?表示匹配1到200个字符。备份文件:在进行大规模替换前,务必先备份原始文件。Sublime Text的"File > Save As"功能可以快速创建副本。
分步验证:可以先只查找不替换(使用"Find"而非"Replace All"),确认匹配的内容确实是想要删除的。
7. 为什么[\s\S]+?比.*更好
很多初学者会尝试使用.*来匹配任意字符,但这里有三个关键区别:
.默认不匹配换行符,而[\s\S]可以*是贪婪匹配,会尽可能多地匹配字符+?组合实现了非贪婪的跨行匹配
比较一下两者的效果:
| 表达式 | 匹配范围 | 贪婪性 | 适用场景 |
|---|---|---|---|
.* | 单行内任意字符(不含换行) | 贪婪 | 单行文本处理 |
[\s\S]* | 跨行任意字符 | 贪婪 | 需要匹配到文档末尾的情况 |
[\s\S]+? | 跨行任意字符 | 非贪婪 | 精准匹配特定范围内的跨行文本 |
在实际清理小说文本时,[\s\S]+?几乎总是最佳选择,因为它能精准定位跨行内容而不会过度匹配。
8. 创建可重用的代码片段
如果你经常需要执行这类清理操作,可以在Sublime Text中创建代码片段:
- 点击"Tools > Developer > New Snippet"
- 输入以下内容:
<snippet> <content><![CDATA[ ^\s*※版本出处[\s\S]+?·著$ ]]></content> <tabTrigger>cleanbook</tabTrigger> <description>Clean novel garbage text</description> <scope>text.plain</scope> </snippet>- 保存为
clean-novel.sublime-snippet
之后,只需输入cleanbook并按Tab键,就会自动插入这个正则表达式。
9. 处理其他常见文本问题
同样的技术可以应用于其他文本清理场景:
- 删除HTML标签:
<[^>]+>(匹配所有尖括号内的内容) - 统一段落间距:
\n{3,}替换为\n\n(将三个以上换行缩减为两个) - 修复错误断行:
([^\n])\n([^\n])替换为$1 $2(将单行断开的句子重新连接)
记住,复杂的清理任务可以分解为多个简单的正则表达式步骤,逐步处理。