2013-05-08 3 views
-1

у меня есть массив элементов, как показано нижерегулярного выражения для соответствия данных

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

ищет регулярное выражение, чтобы сохранить мой массив как ниже

[233,345,656] 

так, который сбрасывает значение до запятой

+0

Вы хотите разделить точку с запятой, а затем получить только числа, которые находятся слева от запятой, и что это? – Renan

+0

@Renan: разделить точкой с запятой, а затем получить числа сразу после точки с запятой [233,345,656] и отбросить данные до запятой –

ответ

3

возможно, попробуйте regex заменить на [0-9]+; с пустой строкой. Если будет только одна цифра, тогда + не нужен. В случае одной цифры также может быть проще просто найти точку с запятой, удалить ее и предыдущий символ.

+0

, ваше регулярное выражение работает, но после разделения данных сохранения, как показано ниже [, 233,, 345,, 656], как я могу избегайте этой дополнительной запятой –

+0

@vishwa: smitec предлагает вам заменить на пустую строку, а не раскалывать –

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 

Edit: для регулярного решения выражений, я предполагаю, что мы говорим о строковом представлении массива. Следовательно, проверка для нечисловых символов. Если вместо этого вы выполняли итерацию по массиву String, то вы, вероятно, могли бы использовать Integer.valueOf("12") и сравнивать, если значение int равно 99. То есть, если вы уверены, что ваши строки всегда будут представлять Integer (или обрабатывать исключение NumberFormatException в противном случае).

Смежные вопросы