快速解决
按下
Ctrl + H打开替换窗口。假设需要删除每行英文冒号:后面的内容,同时保留冒号,可以在“查找目标”中输入(?-s):\K.*$,“替换为”留空,将搜索模式选择为“正则表达式”,先点击“查找下一个”确认结果,再执行“全部替换”。
不同删除需求应该使用哪个表达式?
“删除指定字符后面的内容”通常分为两种情况:保留指定字符,或者把指定字符一起删除。
| 处理需求 | 查找目标 | 替换为 |
|---|---|---|
| 保留冒号,删除冒号后内容 | (?-s):\K.*$ |
留空 |
| 冒号及其后内容一起删除 | (?-s):.*$ |
留空 |
| 保留竖线,删除竖线后内容 | (?-s)|\K.*$ |
留空 |
| 竖线及其后内容一起删除 | (?-s)|.*$ |
留空 |
保留字符串ID= |
(?-s)ID=\K.*$ |
留空 |
| 只处理当前选中的文本 | 使用对应表达式 | 勾选“选区内” |
例如,原始文本为:
用户名:zhangsan
邮箱:[email protected]
城市:上海
使用:
查找目标:(?-s):\K.*$
替换为:留空
搜索模式:正则表达式
处理后得到:
用户名:
邮箱:
城市:
如果使用:
查找目标:(?-s):.*$
替换为:留空
结果则是:
用户名
邮箱
城市
方法一:保留指定字符,删除后面的全部内容
这是最常用的处理方式,适合保留字段名称和分隔符,只清除后面的数据。
以英文冒号为例:
姓名:张三
电话:13800000000
地址:北京市朝阳区
操作步骤如下:
- 使用Notepad++打开文本;
- 按下
Ctrl + H打开“替换”窗口; - 在“查找目标”中输入
(?-s):\K.*$; - 将“替换为”留空;
- 搜索模式选择“正则表达式”;
- 先点击“查找下一个”检查匹配范围;
- 确认无误后点击“全部替换”。
处理结果:
姓名:
电话:
地址:
表达式中各部分的作用如下:
| 表达式 | 作用 |
|---|---|
(?-s) |
强制.不跨越换行 |
: |
匹配指定字符 |
\K |
保留前面已经匹配的内容 |
.* |
匹配后面的任意字符 |
$ |
匹配当前行结尾 |
Notepad++用户手册说明,替换窗口可以通过Ctrl + H打开;在正则表达式模式下,程序使用Boost正则表达式引擎。(?-s)可以确保点号只匹配当前行中的字符,不会跨越换行。具体规则可查看Notepad++查找与替换用户手册。

方法二:把指定字符及其后内容一起删除
不需要保留分隔符时,直接删除\K即可。
例如原文:
苹果|10元
香蕉|8元
橙子|12元
需要删除竖线以及后面的价格,可设置为:
查找目标:(?-s)\|.*$
替换为:留空
搜索模式:正则表达式
结果为:
苹果
香蕉
橙子
这里的竖线需要写成\|,因为|在正则表达式中代表“或者”,直接输入可能改变表达式含义。
其他常见特殊字符也建议进行转义:
| 实际字符 | 正则中写法 |
|---|---|
点号. |
\. |
| 竖线` | ` |
加号+ |
\+ |
星号* |
\* |
问号? |
\? |
左括号( |
\( |
右括号) |
\) |
反斜杠\ |
\\ |
如果指定内容是普通中文、字母或数字,通常可以直接填写。例如删除每行“备注”及其后面的内容:
查找目标:(?-s)备注.*$
替换为:留空
Boost正则语法将.[]{}()*+?|^$等字符作为具有特殊意义的符号;需要匹配这些字符本身时,应在前面添加反斜杠。(Boost)
方法三:删除每行最后一个指定字符后面的内容
一行中可能存在多个相同分隔符。例如:
产品|颜色|价格
手机|黑色|3999
电脑|银色|5999
如果只想删除最后一个竖线后面的价格,并保留前面的竖线,可以使用:
查找目标:(?-s)\|\K[^|]*$
替换为:留空
搜索模式:正则表达式
处理后:
产品|颜色|
手机|黑色|
电脑|银色|
如果最后一个竖线也要删除,则使用:
查找目标:(?-s)\|[^|]*$
替换为:留空
处理后:
产品|颜色
手机|黑色
电脑|银色
[^|]*表示匹配除竖线之外的任意字符。由于表达式后面带有$,它只能匹配一行中最后一个竖线及其后的内容。
如果分隔符是英文逗号,可以替换为:
(?-s),\K[^,]*$
如果分隔符是分号,则使用:
(?-s);\K[^;]*$
方法四:只处理包含特定关键词的行
有时不能删除所有行,只想处理带有特定关键词的内容。
例如:
用户:张三|已启用
用户:李四|已停用
管理员:王五|已启用
只删除以“用户:”开头的行中竖线后面的内容,可以使用:
查找目标:(?-s)^用户:.*?\|\K.*$
替换为:留空
搜索模式:正则表达式
处理后:
用户:张三|
用户:李四|
管理员:王五|已启用
表达式中的:
^表示一行开头;用户:限定需要处理的行;.*?匹配到后面的第一个竖线;\K保留前面内容;.*$删除竖线后的字符。
需要同时处理多个关键词时,不建议直接使用过于复杂的表达式。可以先分别测试每种格式,再执行批量替换。
如何删除指定字符串后面的内容?
指定目标不一定是单个字符,也可以是一段固定文字。
例如:
订单001 状态:已完成
订单002 状态:待付款
订单003 状态:已取消
保留“状态:”,删除后面的内容:
查找目标:(?-s)状态:\K.*$
替换为:留空
处理后:
订单001 状态:
订单002 状态:
订单003 状态:
连同“状态:”一起删除:
查找目标:(?-s)状态:.*$
替换为:留空
这类方法适合处理日志、网址参数、关键词列表、导出数据和批量生成的文本。
完成删除后,如果还需要把处理结果从多行转换成一行,可以继续参考Notepad++如何将多行文本合并为一行。
只修改文档中的部分内容
不希望影响整个文件时,可以使用“选区内”功能:
- 先选中需要处理的几行;
- 按下
Ctrl + H; - 填写查找和替换表达式;
- 勾选“选区内”;
- 点击“全部替换”。
Notepad++用户手册说明,勾选“In selection”后,“全部替换”只会作用于当前选中的文本范围,而不会修改整篇文档。
如果选中内容后没有看到“选区内”选项,可以重新选中文字,再打开替换窗口。
为什么正则替换没有效果?
搜索模式选错
使用上述表达式时,必须选择:
搜索模式:正则表达式
如果选择“普通”模式,\K、.*和$会被当作普通文字处理。
指定字符没有转义
例如需要处理竖线,却填写了:
|.*$
由于|具有正则语法含义,可能出现大量异常匹配。正确写法为:
\|.*$
勾选了“匹配换行”
虽然本文表达式增加了(?-s)限制,但仍建议不要随意勾选“.匹配换行”。否则其他没有加入限制的表达式可能从当前行一直匹配到文件末尾。
使用了中文和英文不同的符号
以下符号外观相似,但实际不是同一个字符:
| 中文符号 | 英文符号 |
|---|---|
: |
: |
, |
, |
; |
; |
( |
( |
) |
) |
文本使用中文冒号时,表达式中也必须填写中文冒号。
部分行没有指定字符
没有包含指定字符的行不会被修改,这是正常结果。例如使用冒号表达式时,不带冒号的空行或标题行会自动保留。
表达式错误却没有明显提示
建议先点击“查找下一个”,确认表达式可以正常运行,再使用“全部替换”。Notepad++手册特别提醒,无效正则表达式的明确错误提示可能只会在执行“查找下一个”时显示。
常用场景速查表
| 目标 | 查找目标 | 替换为 |
|---|---|---|
| 保留冒号,删除其后内容 | (?-s):\K.*$ |
留空 |
| 删除冒号及其后内容 | (?-s):.*$ |
留空 |
| 保留中文冒号 | (?-s):\K.*$ |
留空 |
| 保留第一个竖线 | (?-s)|\K.*$ |
留空 |
| 删除第一个竖线及其后内容 | (?-s)|.*$ |
留空 |
| 保留最后一个竖线 | `(?-s)|\K[^ | ]*$` |
| 删除最后一个逗号及其后内容 | (?-s),[^,]*$ |
留空 |
| 删除“备注=”后面的内容 | (?-s)备注=\K.*$ |
留空 |
| 只处理“用户:”开头的行 | (?-s)^用户:.*?|\K.*$ |
留空 |
操作前需要注意什么?
批量替换会一次修改大量文本,正式处理前建议:
- 先按
Ctrl + S保存原文件; - 使用“另存为”创建一个副本;
- 先点击“查找下一个”检查匹配范围;
- 先替换一处,确认结果后再全部替换;
- 操作错误时立即按
Ctrl + Z撤销; - 大型文件处理后检查开头、中间和结尾内容。
需要将处理后的代码发送到Word等软件,并保留语法高亮时,可以参考Notepad++如何将代码导出为RTF格式。
需要更新或重新安装程序时,可通过Notepad++中文官网查看对应版本与相关使用教程。
常见问题
如何删除每行第一个冒号后面的内容?
保留冒号时使用:
(?-s):\K.*$
连同冒号一起删除时使用:
(?-s):.*$
为什么表达式把整行都删除了?
通常是因为把“查找目标”写成了.*指定字符.*$,导致指定字符前面的内容也被匹配。需要保留前面内容时,应从指定字符开始匹配,或者使用\K。
如何删除每行最后一个逗号后面的内容?
保留最后一个逗号:
(?-s),\K[^,]*$
连同最后一个逗号删除:
(?-s),[^,]*$
能不能只处理选中的几十行?
可以。选中文本后打开替换窗口,勾选“选区内”,再点击“全部替换”。
如何保留指定字符前的空格?
本文提供的表达式不会主动删除指定字符前面的空格。需要清理行尾多余空格时,可以在完成替换后查找:
\h+$
替换为留空,即可删除每行末尾的水平空白字符。
总结
Notepad++删除每行指定字符后面的内容,核心操作是使用Ctrl + H打开替换窗口,并将搜索模式设置为“正则表达式”。
保留指定字符时,推荐使用:
(?-s)指定字符\K.*$
连同指定字符一起删除时,使用:
(?-s)指定字符.*$
当一行中存在多个相同字符时,可以通过否定字符集匹配最后一个分隔符。正式执行“全部替换”前,应先测试一处并保存原始副本,避免因字符转义、中文符号差异或匹配范围错误而误删内容。
