如何捕捉这种模式?

时间:2014-03-17 22:22:22

标签: java regex

我有一个文件,我需要解析每个段落。每个段落都以“Scenario”一词开头。我能够使用以下模式

来做到这一点
        Pattern p = Pattern.compile("Scenario(.*?)(?=Scenario)", Pattern.DOTALL);
        Matcher m = p.matcher(input);

显然,最后一段失败了,因为下面的场景没有展望。

如何编写模式以捕获最后一段?我试着写一个在场景中做出负面预测但却抓住了所有3个段落。 对此有何帮助?


 Scenario: Blah blah

 Scenario: Blah blah

 Scenario: Blah blah

 Scenario: Blah blah

2 个答案:

答案 0 :(得分:0)

到底是什么意思?一行或多行由换行符\n\r\n分隔开来?

(?m)^Scenario:.*(?:[\r\n]+(?!Scenario:).*)*

我假设Scenario:总是出现在一行的开头。那是你试图用你的负面前瞻做的吗?

或者只有段落之间的才会出现换行符,就像文字处理程序一样?那你只需要:

(?m)^Scenario:.*

在任何一种情况下,您都希望使用MULTILINE选项(这是(?m)所做的),并且使用DOTALL。

答案 1 :(得分:0)

对正则表达式进行简单修改即可

Scenario(.*?)(?=Scenario|$)

Regex Demo

CODE:

String re = "Scenario(.*?)(?=Scenario|$)";
String str = "Scenario:blah blah
Scenario:blah blah
";

Pattern p = Pattern.compile(re, Pattern.DOTALL);
Matcher m = p.matcher(str);