2013-05-08 70 views
-1

我有一个项目数组像下面正则表达式匹配数据

[1;233,2;345,3;656] 

正在寻找正则表达式来拯救我的数组像下面

[233,345,656] 

所以这分号

+0

你想用分号分裂,然后得到仅是一个逗号左边的数字,是吗? – Renan 2013-05-08 12:41:34

+0

@Renan:用分号分割,然后在分号[233,345,656]之后得到数字,在分号之前丢弃数据 – 2013-05-08 12:43:49

回答

3
之前丢弃值

也许尝试使用空字符串替换[0-9]+;上的正则表达式。如果只有一个数字,那么不需要+。在单个数字的情况下,查找分号,删除它和前面的字符也可能更容易。

+0

您的正则表达式正在工作,但是在分割了像[[233,345,656]之类的保存数据之后,我怎么能避免这个额外的逗号 – 2013-05-08 12:52:52

+0

@vishwa:smitec建议你用一个空字符串进行替换,而不是分割 – 2013-05-08 13:23:40

0
replaceAll("\d;" ,"") 

如果你的号码的位数不固定在一个可以改变的,你可以使用\d+

0

这会是这样的:

;([^,;]+)$1 

这意味着至少一个分号起始字符,然后是一个或多个既不是分号也不是逗号的字符。最后,它只将分号右侧的部分标记为期望的结果。

我不知道这是Java的语法,具体。我更多的是一个.NET人。但你可以从那里工作。

0

你可以拆分你的数组字符串,来获得夫妇和比;找到数字。

PHP:

$string= "[1;233,2;345,3;656]"; 
$temp=explode(",", $string); //to get couples like 1;233 
print_r($temp); 
$result=array(); 
for($i=0; $i<count($temp);$i++){ 
    $temp1=explode(";", $temp[$i]); 
    array_push($result,$temp1[1]);//take second value 233 
} 
print_r($result); 

输出:$ couple_array:Array ([0] => [1;233 [1] => 2;345 [2] => 3;656])

输出:$阵列:Array ([0] => 233 [1] => 345 [2] => 656])

的Java:

String str = "[1;233,2;345,3;656]"; 
String[] temp = str.split(",");//to get couples like 1;233 
int size=temp.length; 
String[] result=new String[size]; 
for(int i =0; i < size ; i++){ 
    String[] temp1=str.split(";");//take second value 233 
    result[i]=temp1[1]; 
} 
0

如果数组是用整数键入的,则正则表达式超出范围。 您应该考虑创建一个整数值高于99(3位整数)的新数组。

但是,如果你的数组包含字符串,这里有你想要的正则表达式:

Pattern yourPattern = Pattern.compile("(?<=\\D)\\d{1,2}(?=\\D)"); 
// this will find 1 or 2 digit numbers preceded and followed by anything but a digit 

编辑:对正则表达式的解决方案,我认为我们是在谈论一个数组的字符串表示。因此检查非数字字符。 相反,如果你遍历字符串数组,那么你很可能Integer.valueOf("12")和比较,如果为int值99。也就是说,如果你是积极的弦总是代表一个整数(或以其他方式处理NumberFormatException异常)。