String abc ="abc_123,low,101.111.111.111,100.254.132.156,abc,1";
String[] ab = abc.split("(\\d+),[a-z]");
System.out.println(ab[0]);
预期产出:
abc_123
low
101.111.111.111,100.254.132.156
abc
1
问题是我无法为此模式找到合适的正则表达式。
答案 0 :(得分:7)
我建议不用一个正则表达式来解决所有问题。
您的初始字符串似乎包含由","分隔的值。因此,将这些值与","。
分开然后迭代该过程的输出;和"加入"那些是IP地址的元素(看起来这就是你要找的东西)。
仅仅是为了它:请记住,IP地址实际上非常复杂;一种模式"匹配所有"可以找到here
答案 1 :(得分:1)
String[] ab = abc.split(",");
System.out.println(ab[0]);
System.out.println(ab[1]);
int i = 2;
while(ab[i].matches("[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}")) {
if(i > 2) System.out.print(",");
System.out.print(ab[i++]);
}
System.out.println();
System.out.println(ab[i++]);
System.out.println(ab[i++]);
答案 2 :(得分:1)
如果正确位置的3位数和.
位于,
之前或之后,您可以使用前瞻和后瞻检查:
String[] ab = abc.split("(?<!\\.\\d{3}),|,(?!\\d{3}\\.)");
答案 3 :(得分:1)
首先按,
将它们拆分为数组,然后应用正则表达式来检查它是否在所需的格式中。如果是,则将所有这些分隔为,
String abc ="abc_123,low,101.111.111.111,100.254.132.156,abc,1";//or something else.
String[] split = abc.split(",");
String concat="";
for(String data:split){
boolean matched=data.matches("[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}");
if(matched){
concat=concat+","+data;
}else{
System.out.println(data);
}
}
if(concat.length()>0)
System.out.println(concat.substring(1));
}