Notepad++中匹配每行首字符应使用^.,需确保搜索模式为正则表达式且取消勾选“匹配新行”;若要保留原字符,可用^(.)捕获后引用\1;注意ANSI编码下中文可能被错误拆分,建议用UTF-8(无BOM)。

正则匹配每行开头的字符
Notepad++ 的正则引擎默认是「逐行处理」,但 ^ 只匹配行首位置,不自动捕获该位置后的第一个字符。要替换「每行第一个字符」,得明确告诉它:匹配行首之后紧跟着的那个字符(且该行非空)。
正确写法是:^. —— ^ 锁定行首,. 匹配任意一个字符(不含换行符),合起来就是「非空行的第一个字符」。
常见错误:^.* 会匹配整行,^$ 只匹配空行,^.? 会把空行也纳入(? 让 . 可选),导致空行被替换成指定内容,务必避免。
替换操作中启用「匹配新行」会影响结果
Notepad++ 的「正则表达式」模式下,默认不跨行匹配,^ 和 $ 行为正常;但如果误勾了「匹配新行」(. matches newline),. 就能匹配
和
,^. 可能意外匹配到换行符本身,导致替换错乱。
务必确认以下两点:
- 搜索模式选择
正则表达式 - 取消勾选「匹配新行」选项
实际替换示例:把每行首字符统一改成 #
比如原始文本:
apple banana cherry
想变成:
#pple #anana #herry
操作如下:
- 打开「替换」对话框(Ctrl+H)
- 查找目标填:
^. - 替换为填:
# - 确保搜索模式为
正则表达式,且未勾选「匹配新行」 - 点「全部替换」
注意:如果某行只有 1 个字符(如 x),它会被整个替换成 #,这是预期行为 —— 因为那个字符就是「第一个字符」。
想保留原字符的一部分?用捕获组
如果目标不是删/换掉第一个字符,而是「在它前面加前缀」或「替换成它的大写」,就得用捕获组。
例如:给每行首字符加方括号
- 查找:
^(.)——(.)把第一个字符捕获进第 1 组 - 替换为:
[\1]——\1引用捕获内容(Notepad++ 用双反斜杠)
再如:只对英文字符做替换,跳过数字和符号?可以改用 ^[a-zA-Z],但注意这会漏掉中文、emoji 等 Unicode 字符 —— Notepad++ 的旧版 PCRE 不支持 p{L},别硬套 Unicode 类。
真正容易被忽略的是:文件编码影响正则表现。UTF-8 with BOM 下通常没问题,但 ANSI 编码遇到中文时,. 可能按字节而非字符匹配,导致一个汉字被拆成两次替换。建议先转成 UTF-8(无 BOM)再操作。


















