sublime中^和$默认不锚定每行起止,因多行模式未自动识别unix行尾且windows的\r\n及中文界面插件干扰解析;需启用.*模式、显式用\r?兼容crlf,或切换为unix(lf)换行格式。

怎么用^和$准确定位行首行尾
Sublime 里^和$默认不锚定到每行起止,尤其在 Windows 粘贴文本或中文界面下容易失效——根本原因是换行符识别混乱,不是正则写错了。
必须显式处理\r\n:比如匹配以#开头的注释行,别只写^#,得写^#\r?;想删末尾空行,\s*$要配合\s*\Z补一刀。
更稳妥的做法是先切到 Unix (LF) 换行格式(右下角点击换行标识切换),再启用.*模式,避免\r干扰匹配逻辑。
提取网页源码里的品牌名这类结构化字段
直接复制 HTML 源码进 Sublime 后,品牌名常藏在类似<li>Apple</li>或title="Xiaomi"这种位置,靠.*?会跨标签误吞内容。
推荐组合:
- 先用
<li>([^</li>提取<li>包裹的纯文本 - 对属性值,用
title="([^"]+)"或data-brand=['"]([^'"]+)['"],避免.*?吃掉引号内特殊字符 - 查完后按
Alt+Enter选中全部匹配项,再Ctrl+Shift+P→Copy Selected Text导出
<div>,得先用<code><script>]*>[\s\S]*?</script>删脚本块,否则<li>会被截断。
为什么]*>比<.></.>更适合删 HTML 标签
]*>靠否定字符集限定边界,天然避开img alt="A 这种属性里的伪标签;而<code><.></.>在 Sublime 的 Python re 引擎里跨行失效,且遇到<script>console.log('<div>')</script>会把字符串里的<div>也干掉。<br>但<code>]*>不处理换行,若标签被折行(如<div>),就得勾选<code>. matches newline并改用]*>配合[\s\S]——不过更建议先统一换行符:(?:\r\n|\r|\n)+ → \n,再跑标签清理。
清洗后文本粘连、乱码、空行失控的根源
删完标签只剩裸文本,<p>标题</p>
<div>内容</div>变成“标题内容”,这不是正则错,是语义丢失了。
补救要点:
- 块级标签单独处理:
<p></p>→\n,→\n,<br>→\n - 连续空白压缩:
\s+→(一个半角空格),但别用\s匹配全角空格——得加\u3000或直接粘贴全角空格进查找框 - 乱码不是正则问题,是文件编码错:右下角看当前
Encoding是不是UTF-8,若显示Western (CP1252)就手动转码
^$,必须用\s*\Z兜底。











