Java与某些patern分裂

时间:2015-05-26 12:46:54

标签: java regex

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

问题是我无法为此模式找到合适的正则表达式。

4 个答案:

答案 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));
}