import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Example {
public static void main(String[] args) {
final String regex = "^\\s*Failed\\s(.*)([\\s\\S]*?)(Stack\\sTrace:\\s*at\\s)(.*)\\s+in\\s+(.*):line\\s+(\\d+)\\s*$";
final String string = "Test run for /home/runner/work/Library/Library.Tests/bin/Debug/net7.0/Library.Tests.dll (.NETCoreApp,Version=v7.0)\n"
+ "Microsoft (R) Test Execution Command Line Tool Version 17.7.0-preview-23364-03+bc17bb9693cfc4778ded51aa0ab7f1065433f989 (x64)\n"
+ "Copyright (c) Microsoft Corporation. All rights reserved.\n\n"
+ "Starting test execution, please wait...\n"
+ "A total of 1 test files matched the specified pattern.\n"
+ "[xUnit.net 00:00:00.55] Library.Tests.UnitTest1.DeliberateFail2 [FAIL]\n"
+ "[xUnit.net 00:00:00.56] Library.Tests.UnitTest1.DeliberateFail1 [FAIL]\n"
+ " Failed Library.Tests.UnitTest1.DeliberateFail2 [< 1 ms]\n"
+ " Error Message:\n"
+ " System.Exception : Error message\n"
+ " Stack Trace:\n"
+ " at Library.Tests.UnitTest1.DeliberateFail2() in /home/runner/work/Library/Library.Tests/UnitTest1.cs:line 30\n"
+ " at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor)\n"
+ " at System.Reflection.MethodInvoker.Invoke(Object obj, IntPtr* args, BindingFlags invokeAttr)\n"
+ " Failed Library.Tests.UnitTest1.DeliberateFail1 [< 1 ms]\n"
+ " Error Message:\n"
+ " Assert.True() Failure\n"
+ "Expected: True\n"
+ "Actual: False\n"
+ " Stack Trace:\n"
+ " at Library.Tests.UnitTest1.DeliberateFail1() in /home/runner/work/Library/Library.Tests/UnitTest1.cs:line 27\n"
+ " at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor)\n"
+ " at System.Reflection.MethodInvoker.Invoke(Object obj, IntPtr* args, BindingFlags invokeAttr)\n"
+ "Results File: /home/runner/work/Library/Library.Tests/TestResults/test-results.trx\n\n"
+ "Failed! - Failed: 2, Passed: 133, Skipped: 0, Total: 135, Duration: 549 ms - Library.Tests.dll (net7.0)\n"
+ "Error: Process completed with exit code 1.";
final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE | Pattern.CASE_INSENSITIVE);
final Matcher matcher = pattern.matcher(string);
while (matcher.find()) {
System.out.println("Full match: " + matcher.group(0));
for (int i = 1; i <= matcher.groupCount(); i++) {
System.out.println("Group " + i + ": " + matcher.group(i));
}
}
}
}
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for Java, please visit: https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html