Regex专业人士,我有一个GoogleTest --gtest_list_tests输出,我需要解析它以获得每个测试套件和案例。输出具有以下格式:
TestSuite1.
TestCase1
TestCase2
TestSuite2.
TestCase1
TestCase2
TestCase3
等等。我需要一个java正则表达式模式,它将捕获每个测试套件及其案例。对于上面的输入,我需要将组1作为
TestSuite1.
TestCase1
TestCase2
和第2组为
TestSuite2.
TestCase1
TestCase2
TestCase3
我似乎无法弄清楚如何让它发挥作用。现在我正在使用这种模式:
(.+\\.\\n(?:\\s+.+\\n)+)+
哪个不起作用。感谢
答案 0 :(得分:1)
您可以使用此正则表达式捕获分组数据:
[^.\s]+\.(?:\R\h+.+)+
<强>解释强>
[^.\s]+
:匹配任何不是点而不是空格的字符\.
:后跟一个点(?:\R\h+.+)+
匹配1行或多行以1+空格开头的测试用例答案 1 :(得分:1)
也许您可以将\n
设为可选,并省略最后一个量词+
那就匹配
( # Capturing group .+ # Any character one more times \. # Match a dot \n # Match a newline (?: # Non capturing group \s+ # One or more whitespace characters .+ # Any character one more times \n? # An optional newline )+ # Close non capturing group and repeat o 1 or more times ) # Close capturing group
如果您不想在第1组中捕获它,可以使用:
答案 2 :(得分:1)
如果设置多行标记,则可以使用行终止符$
:
public static void main(String[] args)
throws IOException
{
String s = "TestSuite1.\n" +
" TestCase1\n" +
" TestCase2\n" +
"TestSuite2.\n" +
" TestCase1\n" +
" TestCase2\n" +
" TestCase3";
Matcher matcher = Pattern.compile("\\w+\\.$(\\s+\\w+$)+", Pattern.MULTILINE).matcher(s);
while (matcher.find())
{
System.out.println(matcher.group());
System.out.println("-----------");
}
}
Output:
TestSuite1.
TestCase1
TestCase2
-----------
TestSuite2.
TestCase1
TestCase2
TestCase3
-----------