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

如何在Notepad++中为目标行前后直至分隔符的行添加书签?

正则匹配问题:选中包含指定行的完整分隔区块

原始文本

-------------------------------------------------------------
2021-05-18 - Tortrettert.webm 521.483
"Totrrtp" : 5 times
"GDtretP" : 17 times
-------------------------------------------------------------
2021-06-25 - Cghtytryrtyhtjyuj.webm 480.0
"Certhiltertdren" : 2 times
"Berterorn" : 1 times
"Woertmartn" : 4 times
"higerthesertertt" : 66 times
"birrtertths" : 5 times
"woertertmrtertan_" : 1 times
-------------------------------------------------------------
2021-06-26 - Thytyrtytyng.webm 536.999
"Edtryucytryated" : 2 times
"Avrtyertyrtyage" : 2 times
"Yertyartys" : 4 times
"Strychootrylrtying" : 2 times
-------------------------------------------------------------
2021-06-27 - Wortyrtyrthtyts.webm 552.016
"Coffytryhtyjee" : 11 times
-------------------------------------------------------------
2021-06-29 - Moshrhtyjykuyukjity.webm 485.966
"Potrhwhrthetyjrful" : 16 times
"Artrhmithrres" : 2 times
"Nurthctrhlearthr" : 8 times
"Catrhtrhpabrthilrthity" : 1 times
-------------------------------------------------------------

需求

要为所有包含: 1 times的行所在的、被-------------------------------------------------------------分隔的完整区块添加书签,也就是选中整个区块的所有内容(包括前后分隔符)。

尝试的正则及问题

我用了这个正则:

^.*: 1 times.*$(?s)(?:(?!^-{61}$).)*^-{61}$

它能匹配目标行到下一个分隔符的内容,但没法匹配目标行之前到上一个分隔符的部分,导致没法选中整个区块。

期望选中的内容

-------------------------------------------------------------
2021-06-25 - Cghtytryrtyhtjyuj.webm 480.0
"Certhiltertdren" : 2 times
"Berterorn" : 1 times
"Woertmartn" : 4 times
"higerthesertertt" : 66 times
"birrtertths" : 5 times
"woertertmrtertan_" : 1 times
-------------------------------------------------------------
-------------------------------------------------------------
2021-06-29 - Moshrhtyjykuyukjity.webm 485.966
"Potrhwhrthetyjrful" : 16 times
"Artrhmithrres" : 2 times
"Nurthctrhlearthr" : 8 times
"Catrhtrhpabrthilrthity" : 1 times
-------------------------------------------------------------

问题分析与解决办法

原正则的问题

你的正则起始匹配的是包含: 1 times的行(^.*: 1 times.*$),相当于从目标行开始往后找内容,完全没处理目标行之前的区块头部和分隔符,自然没法选中整个区块。

正确的正则表达式

要匹配整个包含目标行的分隔区块,需要从区块的开头分隔符开始,一直匹配到结尾分隔符,同时确保中间包含目标行。可以用这个正则:

(?s)^-{61}$(?:(?!^-{61}$).)*?: 1 times.*?(?=^-{61}$|$)

或者更直观的多行模式写法:

(?m)^-{61}$\n(?:.*\n)*?: 1 times.*\n(?:.*\n)*?^-{61}$

正则解释

  • (?s):开启单行模式,让.能匹配换行符
  • ^-{61}$:匹配区块开头的分隔符行(61个减号)
  • (?:(?!^-{61}$).)*?:非贪婪匹配任意内容,直到找到包含: 1 times的行(避免跳过其他区块)
  • : 1 times.*:匹配目标行
  • .*?(?=^-{61}$|$):继续非贪婪匹配,直到遇到下一个分隔符行或者文本结束
  • (?m):开启多行模式,让^和$匹配每行的开头和结尾

这样就能精准选中每个包含: 1 times行的完整分隔区块了。

内容的提问来源于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.22 00:55:59