用\D删除非数字字符需关闭“. matches newline”,因其在跨行时会失效;\D比1更简洁稳定,兼容PCRE且不依赖POSIX类,但会保留换行符导致空行,需后续清理。0-9 ↩

直接用 \D 替换为空即可,但必须关掉「. matches newline」,否则可能漏删换行符附近的非数字字符。
为什么用 \D 而不是 [^0-9]?
\D 是 \d 的补集,在 Notepad++ 的 PCRE 模式下等价于 [^0-9],但更简洁、更少出错。Notepad++ 对 POSIX 类(如 [[:digit:]])支持不稳定,[^0-9] 虽然可用,但容易因编码或空格隐含字符导致边界匹配异常;而 \D 行为明确,兼容性更好。
-
\D匹配所有非 ASCII 数字字符,包括字母、标点、空格、制表符、换行符前后的空白等 - 它不匹配 Unicode 数字(如全角数字 123),这是预期行为,不是 bug
- 若文本含 BOM 或 UTF-8 带签名,
\D仍能正常工作,无需额外处理
关键设置:必须关闭「. matches newline」
这个选项一旦开启,\D 在跨行场景下会失效——因为 . 被设为可匹配换行符后,引擎内部对行边界判断变混乱,导致部分行首/行尾的非数字字符被跳过。实测在 Notepad++ 7.3.1–8.6.x 中均存在该问题。
- 打开「查找 → 替换」(
Ctrl+H) - 「查找目标」填:
\D - 「替换为」留空
- 「搜索模式」选「正则表达式」
- 确认未勾选「. matches newline」(即不启用该复选框)
- 点「全部替换」
删完只剩数字,但中间有空行或多余换行怎么办?
这是 \D 的自然副作用:它逐字符删除,不自动合并空白。比如原内容是 abc\n123\ndef,删完变成 \n123\n,两端保留了换行符。
- 先执行
\D删除非数字 - 再清理空行:
^\s*$\r?\n→ 替换为空(此时需勾选「. matches newline」) - 若还剩连续换行,用
\r\n\r\n→\r\n合并 - 注意顺序不能反,否则先删空行再删非数字,可能导致数字被隔断或错位
真正容易被忽略的是:你删的从来不是“文字”,而是「每个非数字字节」。所以复制粘贴进来的富文本换行、不可见的零宽空格、BOM 头,都会被 \D 一并吃掉——这不是缺陷,是正则的底层诚实。如果结果里意外出现乱码或截断,优先检查源文本是否含 UTF-16 或混合编码。


















