2016-11-28 5 views
1

ПЕРЕД тем, что вы делаете в нижнем выражении или отмечаете как дубликат - пожалуйста, прочитайте (особенно отказ от ответственности).Regex для разбиения списка целых чисел, разделенных пробелами на группы

У меня есть простой список целых чисел, например: 1 23 765 23 25 67 12 (номера не имеют значения, любая длина возможна). Я хотел бы разделить этот выход на один матч, с каждым номером в отдельную группу, так что я создал регулярное выражение:

(\d+)(?:\s(\d+))*

Мое понимание этого заключается в следующем:

  • захватить ряд в первую группу
  • найти множество пространства (я знаю \s не только пространства), а также ряд и поставить это число в следующую группу

Но выход, который я получаю на Regex101, отличается - он возвращает только первый и последний числа из моего первоначального списка (в данном случае: 1 и 12). Вот LINK.

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

Отказ от ответственности: Я знаю, что могу сделать это просто путем разделения на любом языке программирования, который поддерживает строковые манипуляции, но мне просто интересно, почему это не работает, и я ищу объяснение. Я также не мог найти примеров такого решения через Интернет, потому что все решения, которые я нашел, подразумевали использование split() (или, однако, этот метод назван в <insert your programming language here>).

+0

Итак, вы ищете только объяснение, а не решение? Regex101 поддерживает только ограниченное количество ароматизаторов регулярных выражений. В модуле регулярных выражений Python PyPi .NET вы получите все записи с этим регулярным выражением. –

+1

Я не уверен, что ваша скрипка регулярного выражения на самом деле показывает только одно совпадение. Напротив, я вижу, что каждое число в синем цвете соответствует шаблону '\ d +'. Вы можете спросить об этом в контексте языка или инструмента, отличного от Regex101. –

+0

Существует хорошее объяснение аналогичного шаблона на http://stackoverflow.com/questions/24857005/why-does-a-repeated-capture-group-return-these-strings. Если вы не укажете свою проблему, вопрос будет обманом. –

ответ

0

Вы можете использовать \b в качестве границы слова и сопоставить каждое целое число в захвате группы, как так

\b(\d+)\b 

Regex101: https://regex101.com/r/PZlHze/3 Edit: Я хочу отметить, что регулярное выражение также требует глобального флага g, чтобы соответствовать больше, чем просто первый!

+1

'\ b's даже не нужны. см. https://regex101.com/r/QOt4S5/1 – Fallenhero

+0

, но это не отвечает на вторую часть – Fallenhero

+0

Так же, как @Fallenhero сказал - это не отвечает на часть 2. – Asunez

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