regex 删除上面没有特定行的行

bis0qfac  于 12个月前  发布在  其他
关注(0)|答案(2)|浏览(74)

我有一个rythimn游戏图表脚本

TARGET(1
TIME(268466)
TARGET(1
TIME(273333)
TIME(278723)
TARGET(1
TIME(306666)
TIME(309492)
TARGET(0
TIME(330005)

但是,我需要每一行都保持“时间,目标,时间,目标”的模式。但就像你看到的,有重复的时间,这些时间可能与其他物体的时间有关,而不是这些目标,这就是为什么我需要把它们弄出来。所以它应该看起来像这样:

TARGET(1
TIME(268466)
TARGET(1
TIME(273333)
TARGET(1
TIME(306666)
TARGET(0
TIME(330005)

基本上,如果上面的一行也包含“TIME”一词,则删除带有“TIME”一词的一行(删除第二行也包含TIME一词)。如何在不手动删除它们的情况下实现这一点?我相信有成千上万的线工作。

i2byvkas

i2byvkas1#

如果您使用的是Notepad++,您可以使用:用途:

^TIME\(\d+\)\K(?:\RTIME\(\d+\))+
  • ^字符串开头
  • TIME\(\d+\)匹配时间和括号之间的1+位数(使用\d{6}精确表示6位数)
  • \K忘记到目前为止匹配的内容
  • (?:\RTIME\(\d+\))+重复1+次匹配换行符和TIME模式

Regex demo
在替换中使用空字符串。
如果TARGET(部分必须跟在后面,你可以使用一个正的lookahead来Assert它:

^TIME\(\d+\)\K(?:\RTIME\(\d+\))+(?=\RTARGET\(\d)

Regex demo

vcudknz3

vcudknz32#

您应该能够替换匹配的

(?<=^TIME\(\d{6}\))\r?\nTIME\(\d{6}\)

空字符串。
Demo
演示使用PCRE正则表达式引擎,但我希望结果与使用Notepad++的does support fixed-length negative lookbehinds相同。
请注意,在演示中,我添加了"TIME(309493)"行,以说明如果两个或多个行匹配

^TIME/(\d{6}/)\r?\n

直线匹配

^TARGET\(\d\r?\n

除了第一行(“TIME”)之外的所有行都将被匹配,因此可以转换为空字符串。
\r?\n可以替换为\R

相关问题