正则表达式sublimetext替换特定字符串后的文本文件中的循环字符串

时间:2017-06-01 13:55:33

标签: regex sublimetext pcre

我真的花了整整两天时间在谷歌和regex101上搜索,然后再询问。
这是我的文件(数千个)的样子:

FIRST LINE THAT MIGHT CONTAIN ON .
SECTION1
SOME TEXT THAT MIGHT CONTAIN ON .
SECTION2
ON 04/1/2017 SOME TEXT
ON 25/1/2017 SOME TEXT
ON 15/2/2017 SOME TEXT

我只需删除SECTION2中的每个ON次出现 我无法明确发布在两天的反复试验中没有工作的模式。 (它会使搜索引擎充斥着无关紧要的东西,同时证明我有限的智慧 - 关于这个主题; - )

1 个答案:

答案 0 :(得分:1)

您可以使用此模式执行此操作:

(?:\G(?!\A)|\A(?>.*\R)*?SECTION2\h*\R)(?>.*\R)*?\KON\h

demo

我们的想法是构建一个只能使用\G锚点返回连续匹配的模式。此锚点在字符串的开头或成功匹配后的位置成功。

模式细节:

(?: # non-capturing group: two possible starts
    \G(?!\A)  # the position after a previous match
  |           # OR
    \A(?>.*\R)*?SECTION2\h*\R # reach the first occurrence of SECTION2 from the start
)
(?>.*\R)*? # match lazily eventual lines that don't start with ON
\K         # remove all on the left from the match result
ON\h       # and keep only ON with a trailing space

(?!\A)禁止第一个分支在字符串的开头成功,这样第一个匹配总是使用第二个分支(只有一次,因为它以\A开头)。下一个匹配始终使用第一个分支。这会强制所有出现的ON都在SECTION2之后。