我有一个文件,我需要解析每个段落。每个段落都以“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
答案 0 :(得分:0)
段到底是什么意思?一行或多行由换行符\n
或\r\n
分隔开来?
(?m)^Scenario:.*(?:[\r\n]+(?!Scenario:).*)*
我假设Scenario:
总是出现在一行的开头。那是你试图用你的负面前瞻做的吗?
或者只有段落之间的才会出现换行符,就像文字处理程序一样?那你只需要:
(?m)^Scenario:.*
在任何一种情况下,您都希望使用MULTILINE选项(这是(?m)
所做的),并且不使用DOTALL。
答案 1 :(得分:0)
对正则表达式进行简单修改即可
Scenario(.*?)(?=Scenario|$)
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);