给出以下字符串(一行):
a_Type_of_Data 0.847481:611x569+446+1200,0.515323:597x762+448+1101,0.587354:597x558+488+1207
我想像这样拆分它[611,559,446,1200],[597,762,448,1101],[597,558,488,1207] 因此,基本上,无论数字之间的字符如何,都可以在“:”和“,”之间获得4个数字。
我已经尝试在“,”上分割字符串,但是我仍然遇到“:”前面的数字的问题。或像使用string result = Regex.Replace(input, @"[^\d]", "");
有没有办法用正则表达式来做到这一点? 预先感谢。
答案 0 :(得分:1)
您可以首先使用此正则表达式\d+x\d+(?:\+\d+){2}
来匹配用x
和+
分隔的数字,然后使用[x+]
拆分这些单独的字符串,这将为您提供另一个数组数字。
检查此Java代码,
String s = "a_Type_of_Data 0.847481:611x569+446+1200,0.515323:597x762+448+1101,0.587354:597x558+488+1207";
Pattern p = Pattern.compile("\\d+x\\d+(?:\\+\\d+){2}");
List<List<String>> list = new ArrayList<>();
Matcher m = p.matcher(s);
while(m.find()) {
String[] data = m.group().split("[x+]");
list.add(Arrays.asList(data));
}
list.forEach(System.out::print);
按预期方式打印输出,
[611, 569, 446, 1200][597, 762, 448, 1101][597, 558, 488, 1207]
答案 1 :(得分:0)
使用Matcher
及其.find()方法:
package so21090424;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class PatternFinder {
public static void main(String[] args) {
final String input = "a_Type_of_Data 0.847481:611x569+446+1200,0.515323:597x762+448+1101,0.587354:597x558+488+1207";
Pattern p = Pattern.compile(":([0-9]+)[x\\+]([0-9]+)[x\\+]([0-9]+)[x\\+]([0-9]+),?");
Matcher m = p.matcher(input);
while(m.find()) {
System.out.println(m.group(1) + "\t" + m.group(2) + "\t" + m.group(3) + "\t" + m.group(4));
}
}
}
答案 2 :(得分:0)
cust = cust.where((cust.total_incoming_call == 0) & (cust.net_uses == 0))