Regex несколько совпадений и $ 1, $ 2 переменных (быстро и легко!) - PullRequest
0 голосов
/ 28 июня 2011

Мне нужно извлечь числовые значения из строк, таких как «£ 17 000 - £ 35 000 в зависимости от опыта»

([0-9]+k?[.,]?[0-9]+)

Эта строка является лишь примером, я могу иметь 17k 17.000 1717,000, в каждой строке может быть 0,1 или 2 числа (не более 2), они могут быть везде в строке, отделены чем-либо еще.Мне просто нужно извлечь их, поместить первый извлеченный в одном месте, а второй в другом.

Я мог бы придумать это, но это дает мне два матча (не обращайте внимания на k?[,.], этоправильно) в группе $1.Мне нужно иметь 17,000 в $1 и 35,000 в $2, как мне это сделать?Я также могу использовать 2 различных регулярных выражений

Ответы [ 3 ]

1 голос
/ 28 июня 2011

Использование регулярных выражений

С каждой открывающей круглой скобкой вы создаете новую группу захвата. Таким образом, чтобы иметь вторую группу захвата $2, вам нужно сопоставить второе число с другой частью вашего регулярного выражения, заключенной в скобки, и, конечно, вам нужно сопоставить часть между числами с.

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

См. здесь на Regexr

Но, возможно, у Solr есть функции регулярного выражения, которые помещают все совпадения в массив, что, возможно, будет проще в использовании.

0 голосов
/ 28 июня 2011

Как насчет чего-то вроде

[£]?([0-9]+k?[.,]?[0-9]+) - [£]([0-9]+k?[.,]?[0-9]+)

Теперь это даст вам две группы.

Редактировать: Возможно, тоже нужно очистить пробелы

0 голосов
/ 28 июня 2011

Соответствует всему диапазону долларов с 2 группами захвата, а не сопоставляет каждую сумму в долларах с одной группой захвата:

([0-9]+k?[.,]?[0-9]+) - ([0-9]+k?[.,]?[0-9]+)

Однако, я волнуюсь (да, я имею в виду: p) насчет этого регулярного выражения, так как оно будет соответствовать некоторым странным вещам:

182k,938 - 29.233333

оба будут сопоставлены, это, безусловно, может быть улучшено, если вы сможете дать больше информации о ваших типах ввода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...