因为[a-za-z]仅匹配ascii字母,无法匹配é、ñ、α等非ascii字符;notepad++默认pcre引擎下,需用1精准提取纯数字,避免误删中文或破坏行结构。0-9\r\n ↩

为什么直接用[a-zA-Z]删字母会漏掉部分字符?
Notepad++ 默认用 PCRE 引擎,[a-zA-Z] 只匹配 ASCII 字母(A–Z、a–z),对带重音的字母(如 é、ñ、ç)或希腊字母(α、β)完全无效。如果你的文本含法语、西班牙语或数学公式,这些字符会原样留下。
更稳妥的做法是用 [^\d\r\n\s] 先剔除非数字、非换行、非空白的所有内容,再人工或二次清理残留——但这样会误删中文、日文等非英文字。所以得看你的目标:
- 只要纯阿拉伯数字(0–9)?用
[^0-9\r\n]最干净 - 允许保留小数点、负号、e/E(如 -12.34e5)?不能简单删字母,得用否定逻辑
- 原文混有中文、标点、空格,只想抠出数字串?必须分两步:先删非数字非换行符,再合并空行
真正只留数字的正则怎么写?
别用 \D 直接替换为空——它等价于 [^0-9],但 Notepad++ 里 \D 在某些旧版本(如 v7.1 以下)存在编码兼容问题,偶尔不生效。稳妥写法是显式写出范围:
查找目标:[^0-9\r\n]
替换为:(完全留空)
务必勾选「匹配正则表达式」,且不要勾选「. matches newline」
这个表达式意思是:“匹配一切不是 0–9、也不是回车 \r、也不是换行 \n 的字符”。它能保住每行结构,避免数字被挤到一起。
常见错误:
- 写成
[^0-9\n]→ Windows 换行是\r\n,单写\n会导致\r被当普通字符删掉,破坏行结构 - 忘了取消勾选「. matches newline」→
.会跨行匹配,导致替换逻辑错乱 - 替换框里粘贴了不可见空格 → 看似清空,实则替换成空格,后续数字间多出空隙
删完字母后,怎么处理残留的空格和空行?
字母删掉后,原文 “abc 123 def 456” 会变成 “ 123 456”,中间留空格;如果某行全是字母,就变成空行。这两类要分开处理:
先清空格(保留数字间距):
查找:[ \t]+(一个或多个空格或 Tab)
替换为: (单个空格)或直接留空
再删空行:
查找:^\s*$\r?\n
替换为:(留空)
注意:这一步必须勾选「. matches newline」,否则 ^ 和 $ 不跨行生效,空行删不干净
顺序不能反——如果先删空行再删空格,可能把“123␣␣456”中间的空格删成“123456”,数字就连在一起了。
想保留小数、负号、科学计数法怎么办?
纯删英文字母不影响 .、-、e、E,但它们会裸留在文本里。比如 “val = -12.34e5” 删字母后变成 “ = -.e”,这不是你想要的。
这时不能靠删字母,得靠提取数字模式:
查找:(-?\d+\.?\d*(?:e[+-]?\d+)?)
替换为:$1\r\n
并勾选「匹配正则表达式」和「. matches newline」
说明:
-
-?匹配可选负号 -
\d+\.?\d*匹配整数或小数(如 123 或 12.34) -
(?:e[+-]?\d+)?非捕获组,匹配可选的 e+数字 或 e-数字 - 整个用
()捕获,替换用$1\r\n每个数字单独一行
这个正则在 Notepad++ v7.8.9 及以上稳定支持;v7.5 以下可能不识别 ?: 语法,建议降级为 (e[+-]?\d+)? 并接受多一层捕获。
真正的难点不在写正则,而在确认你的数据里有没有边界情况:带括号的数字、千分位逗号、货币符号……这些都得额外加判断,没法一招通吃。











