RegEx: разделить строку на 1 или более групп - PullRequest
0 голосов
/ 27 марта 2020

Я использую функцию REGEXEXTRACT в Google Sheets. Данные в каждой строке представляют собой строку, которая выглядит следующим образом:

2020 02 15 - Джо Сефина
2020 02 18 - Candy Kane - Toot Suites - 123 Some Street
2020 02 19 - Badonk Edonk - На лодке

Мне нужно захватить следующие группы для каждого ряда:

(2020 02 15) (Джо Сефин)
(2020 02 18) (Candy Kane) (Toot Suites) (123 Some Street)
(2020 02 19) (Badonk Edonk) (На лодке)

Разделитель всегда "-" ( пробел), но не все строки имеют одинаковое количество разделителей.

Кажется, что расщепление строки должно быть простым, но мои навыки регулярных выражений в лучшем случае зачаточны; Я бьюсь об этом около часа (с помощью regex101.com), но не смог придумать выражение, которое дает желаемый результат.

Я пытаюсь изменить это:

^(?>[0-9 ]* - )(.*)( - .*)?  

Но мой вывод всегда либо захватывает первые две группы, но не остальные:

(2020 02 15) (Джо Сефин)
(2020 02 18) (Кенди Кейн) (Toot Suites) (123 Some Street)
(2020 02 19) (Badonk Edonk) (на лодке)

Или он фиксирует все после даты в виде одной группы:

(2020 02 15) (- Джо Сефина)
(2020 02 18) (- Candy Kane - Toot Suites - 123 Some Street )
(2020 02 19) (- Бадонк Эдонк - На лодке)

Я открыт для ваших предложений

1 Ответ

0 голосов
/ 27 марта 2020

Если вам нужно получить 2, 3 или 4 группы, вы можете использовать

^(.*?) - (.*?)(?: - (.*?))?(?: - (.*?))?$

См. Демоверсию regex

Подробности

  • ^ - начало строки
  • (.*?) - Группа 1: любой ноль или более символов, кроме символов разрыва строки, как можно меньше
  • - - пробел, -, пробел
  • (.*?) - Группа 2: любой ноль или более символов, кроме символов разрыва строки, как можно меньше
  • (?: - (.*?))? - необязательная группа без захвата, соответствующая 1 или 0 вхождениям
    • - - пробел, -, пробел
    • (.*?) - группа 3: любой ноль или более символов, кроме строки разбивать символы как можно меньше
  • (?: - (.*?))? - необязательная группа без захвата, соответствующая 1 или 0 вхождениям
    • - - пробел, -, пробел
    • (.*?) - Группа 4: любой ноль или более символов, кроме символов разрыва строки, как можно меньше
  • $ - конец строки .
...