正则表达式匹配行Z仅在行X前面,但如果前面是行Y则不行

时间:2017-07-05 04:18:49

标签: regex

让我先说明文本是逐行输入的。 Lookahead不起作用。

因此,对于以下内容,我应该运行两个单独的正则表达式搜索。

就我大脑受伤之前的正则表达式而言,这就是我所知道的:

案例1:

(?<!Case 2.)[\s\S]*?This line should match\.

案例2:

(?<!Case 1.)[\s\S]*?This line should match\.

第一个正则表达式搜索应该为与文本匹配的每一行返回一个成功匹配:&#34;此行应匹配。&#34;在第&#34;案例1之后。&#34;但在第2行和第34例之前。&#34; (为了清楚起见,在此括起[])

第二个正则表达式搜索应该为与文本匹配的每一行返回一个成功匹配:“&#34;此行应匹配。”#34;在行&#34;案例2之后。&#34;但在排队之前&#34;开始新的序列。&#34; (括号()为清晰起见)

在实际文本中,括号和括号不存在,两组不同的行在文本上是相同的。

正在搜索的文字:

Start of new sequence.
Random line(s).
Case 1.
Random line(s).
[This line should match.]
Random line(s).
[This line should match.]
Random line(s).
Case 2.
Random line(s).
(This line should match.)
Random line(s).
(This line should match.)
Random line(s).

Start of new sequence.
Random line(s).
Case 1.
Random line(s).
[This line should match.]
Random line(s).
[This line should match.]
Random line(s).
Case 2.
Random line(s).
(This line should match.)
Random line(s).
(This line should match.)

1 个答案:

答案 0 :(得分:0)

你怎么能想象一个你还没有的模式之前(或之后)的条件匹配?
因此,如果您收到该行,则可以匹配该模式(使用前瞻或任何其他结构)。

使用预测我只是建议:

(?<=Case 1\.).*?(\[This line should match.\]).*?(?=Case 2\.)

(?<=Case 2\.).*?(\(This line should match.\)).*?(?=Start of new sequence\.)

This为你的榜样做好工作。