2015-01-29 3 views
1

У меня есть сотни файлов, содержащих массивы чисел. Массивы различаются по размеру. Мне нужно определить, какие массивы имеют только три элемента и извлекают их значения.RegEx: строка возврата, содержащая не более двух конкретных символов

Вот некоторые примеры:

askjdh fdshajkjashf hjd ([123, 2321, 321, 123, 3425.98]); 

askjdh ljkjsd hjd ([123, 2321, 321.345]); 

askjdh w;klejfjk hjd ([123, 2321, 321.345]); % aksdhj 

askjdh ljkjsd hjd ([ 13, 21 , -45]); 

два матча из выше, должны быть:

askjdh ljkjsd hjd ([123, 2321, 321.345]); 

askjdh ljkjsd hjd ([ 13, 21 , -45]); 

И значения:

123, 2321, 321.345 

13, 21, -45 

Я думал, что это будет работать, но это не:

\[(.*),(.*),(^[^,].*$)\] 

Это действительно работает ... но кажется довольно громоздким. Возможно, есть что-то более элегантное?

\[\s*([-+]?\d+\.?\d*)\s*,\s*([-+]?\d+\.?\d*)\s*,\s*([-+]?\d+\.?\d*)\s*\] 
+0

Какой язык вы используете? – tlehman

+0

В java, чтобы получить длину массива, «array.length», чтобы получить их значения, это «array [0]; массив [1] и т. д. Это именно то, что вы хотите? – Rika

+0

Язык: Я использую BareGrep для поиска по всем файлам. –

ответ

0

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

\[\s*(?:-?\d*\.?\d+\s*,\s*){2}-?\d*\.?\d+\] 

Working demo

enter image description here

Он похож на ваш регулярное выражение, но с помощью {2} обозначений вы можете сократить его немного ,

+0

Не могли бы вы разместить ссылку на regex101? Я пробовал что-то вроде твоего, но я думаю, что ОП хочет получить цифры (что заставляет меня использовать захваты, которые я не вижу в твоем ответе). *** Редактировать: *** Да, я видел ссылку, спасибо :) –

+0

@ Al.G.там вы идете :) –

0

Поскольку вы ищете ровно три элементов, вы можете использовать /\[[^,]+, *[^,]+, *[^\]]+ *\]/

\[[^,]+, *[^,]+, *[^\]]+ *\] 

Regular expression visualization

Debuggex Demo

+1

Эй Тоби, вы можете даже сократить его больше: '/ \ [(* [^,] +,) {2} * [^ \]] + * \] /' –

0

Вот что я пытался сделать:

https://regex101.com/r/zG5eZ5/1

Но по какой-то причине, я получаю только последние две цифры (посмотреть на «соответствие информации», с правой стороны), а не все из них.

0

использовать этот шаблон ж/gm вариантов для извлечения 3 элемента только и их значения

\(\[\s*([^, ]+)\s*,\s*([^, ]+)\s*,\s*([^, ]+)\s*\]\);$ 

Demo

+0

Мне это нравится , У этого есть дополнительное преимущество захвата чисел экспе- римента, таких как 10.02e-23. Я закончил тем, что взял «$» с конца, потому что мне действительно нужны случаи, когда после определения массива есть текст. В итоге я использовал: \ [\ s * ([^,] +) \ s *, \ s * ([^,] +) \ s *, \ s * ([^,] +) \ s * \] –

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