如何用Notepad++正则匹配字符串第二次出现至末尾并批量替换?
刚帮你捋了下这个Notepad++正则替换的问题,核心就是精准定位到每行里第二个title字段的值,别把第一个"Department"给改了对吧?结合你的数据,我给你两种实用的解决方案:
场景1:把所有第二个title替换成固定内容
比如你想统一改成"AWESOME CUSTOM TEXT",操作步骤如下:
- 打开Notepad++,按下
Ctrl+H调出替换窗口 - 切换到「正则表达式」模式,记得勾选「匹配换行符」(确保每行独立处理,不会跨行匹配)
- 在「查找目标」里粘贴这个正则:
👉 正则逻辑拆解:(.*?"title":"Department".*?"title":")([^"]+).*?"title":"Department":从行首开始,匹配到第一个title":"Department的全部内容(用.*?非贪婪模式,避免过度匹配后面的内容).*?"title":":接着匹配到第二个title":"的位置([^"]+):捕获第二个title后面的所有非双引号内容——这就是你要替换的目标值
- 在「替换为」里输入:
👉 这里的$1AWESOME CUSTOM TEXT$1是引用前面正则里第一个捕获组的内容(也就是从行首到第二个title":"的所有内容),后面直接跟上你要替换的固定文本就行。
场景2:动态替换为每行里的特定值(比如行首的字符串)
看你的数据,第一行开头有'AWESOME',第二行有'MO IS AWESOME',如果你想把第二个title的值和这个开头的字符串关联(比如第一行改成"AWESOME 1",第二行改成"MO IS AWESOME 2"),可以用这个进阶正则:
「查找目标」:
^(\(\d+, \d+, \d+, '([^']+)', .*?"title":"Department".*?"title":")([^"]+)
「替换为」:
$1$2 1
👉 这个正则多捕获了行首的那个字符串(比如AWESOME),用$2引用它,后面可以加自定义后缀。如果你想对应每行的id调整后缀,再微调捕获组即可。
测试示例
拿你的第一行原始数据测试:
(405, 1, 1, 'AWESOME', 1, 752, 1, 753, 1, '[{"id":1,"left":1,"right":714,"title":"Department"},{"id":405,"left":752,"right":753,"title":"CHANGE THIS TO AWESOME 1"}]')
用场景1的正则替换后,会变成:
(405, 1, 1, 'AWESOME', 1, 752, 1, 753, 1, '[{"id":1,"left":1,"right":714,"title":"Department"},{"id":405,"left":752,"right":753,"title":"AWESOME CUSTOM TEXT"}]')
内容的提问来源于stack exchange,提问作者mk_89

