Java 中的多个重复组模式匹配

Multiple repeated groups pattern matching in Java

这里是问题和所需的解决方案:
1.First 案例:

String str = "Variable_1 in the range 0...4";

解决方案:var1 = Variable_1 Range = 0...4

 Pattern p1 = Pattern.compile("(.*[^.]) in the range of (.*[^.])$");
    Matcher m1 = p1.matcher(desc);

    if (m1.find()) {
        System.out.println(m1.group(1));
        System.out.println(m1.group(2));
    }

2.Second 案例:

String str = "Variable_1 in the range 0...4 Variable_2 in the range 10...40";

解决方法: var1 = Variable_1 range1 = 0...4 var2 = Variable_2 range2 = 10...40

3.Third 案例:

String str = "Variable_1 in the range 0...4 Variable_2 in the range 10...40 Variable_3 in the range 10...50";

解决方法: var1 = Variable_1 range1 = 0...4 var2 = Variable_2 range2 = 10...40 var3 = Variable_3 range3 = 10...50

第一种情况适用于正则表达式。我需要为第二种和第三种情况扩展相同的正则表达式。它还应该能够处理 n 种情况。

假设您的模式中的 of 是多余的,您可以使用

(\w+) in the range (\d+\.+\d+)

或者,如果您的字符串包含 of,则添加 (\w+) in the range of (\d+\.+\d+)\w+ 将匹配一个或多个字母、数字或下划线。 \d+\.+\d+ 匹配 1+ 个数字,1+ 个点,1+ 个数字。

regex demo

Java demo:

String lines[]  = {"Variable_1 in the range 0...4",
    "Variable_1 in the range 0...4 Variable_2 in the range 10...40",
    "Variable_1 in the range 0...4 Variable_2 in the range 10...40 Variable_3 in the range 10...50"
};
Pattern p = Pattern.compile("(\w+) in the range (\d+\.+\d+)");
for(String line : lines)
{
    System.out.println(line);
    Matcher m = p.matcher(line);
    List<String> res = new ArrayList<>();
    while(m.find()) {
        System.out.println(m.group(1));
        System.out.println(m.group(2));
    }
}

输出:

Variable_1 in the range 0...4
Variable_1
0...4
Variable_1 in the range 0...4 Variable_2 in the range 10...40
Variable_1
0...4
Variable_2
10...40
Variable_1 in the range 0...4 Variable_2 in the range 10...40 Variable_3 in the range 10...50
Variable_1
0...4
Variable_2
10...40
Variable_3
10...50