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+ 个数字。
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
这里是问题和所需的解决方案:
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+ 个数字。
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