You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Notepad++正则表达式标记分隔符前最后一个逗号分隔值

问题:用Notepad++正则为分隔符前最后一个带逗号数字行添加书签

原始文本

Drtyjtyjnt
11,825,222
Ftyryer
8,823,623
Strtrtuperd
8,542,448
Ts
7,153,156
Supd
7,122,304
Su.3
6,920,743
Supld
dddd
tgtgtg
Sd
April 1991
/////////////////////////
Freeeer
7,537,583
Dufdgnt
4,381,322
SioBup
3,010,937
S
2,238,608
Du
SuperM
Sup
August 1989
/////////////////////////
D
12,184,781
S
9,023,965
Fog
8,913,781
Supe
7,441,191
May 1991
/////////////////////////

需求

给每个/////////////////////////分隔符之前的最后一个带逗号的数字行添加书签,目标行如下:

6,920,743
2,238,608
7,441,191

原正则失效原因分析

第一个正则:(?-s)(\d{1,3}(?:,\d{3})+)(?=(?:(?!\R/////////////////////////).)*\R/////////////////////////)

  • (?-s)关闭了单行模式,.无法匹配换行符,导致(?:(?!\R/////////////////////////).)*只能匹配当前行内的字符,无法跨行匹配到后续的分隔符,自然无法找到符合条件的目标行。

第二个正则:(?s)(\d{1,3}(?:,\d{3})+)(?=(?:\R(?!/////////////////////////).)*\R/////////////////////////)

  • (?s)开启单行模式后,.能匹配换行,但表达式仅限制后续行不是分隔符,没有限制后续行不能出现其他带逗号的数字行。这会导致所有带逗号的数字行(只要后面有分隔符)都被匹配,而不是最后一个符合条件的行。

可行解决方案

正则表达式(匹配整行)

^(\d{1,3}(?:,\d{3})+)$(?=(?:\R(?!^\d{1,3}(?:,\d{3})+$|^/////////////////////////$).)*\R^/////////////////////////$)

逻辑说明

  • ^(\d{1,3}(?:,\d{3})+)$:精准匹配整行的带逗号数字格式(如6,920,743)
  • 正向预查(?=...):确保当前行之后直到分隔符的所有行里,不再出现其他带逗号的数字行,只允许非目标行和分隔符存在,以此定位到每个分隔符前的最后一个目标行。

Notepad++操作步骤

  1. 打开目标文本,按下Ctrl+F打开查找对话框
  2. 切换到「标记」标签页
  3. 勾选「正则表达式」选项,不要勾选「.匹配换行」
  4. 输入上述正则表达式
  5. 点击「标记全部」,即可给所有目标行添加书签

内容的提问来源于stack exchange,提问作者Pubg Mobile

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 12:12:37