У меня есть регулярное выражение, которое я пытаюсь сопоставить со следующими типами данных, с каждым токеном, разделенным неизвестным количеством пробелов.
Обновление : «Текст» может быть практически любым символом, поэтому изначально у меня было .*
. Важно отметить, что он также может содержать пробелы.
- Текст
- Текст 01
- Текст 01 от 03
- Текст 01 (из 03)
- Текст 01-03
Я хотел бы захватить «Текст», «01» и «03» как отдельные группы, и все, кроме «Текст», являются необязательными. Лучшее, что я смог сделать, это:
\s*(.*)\s+(\d+)\s*(?:\s*\(?\s*(?:of|-)\s*(\d+)\s*\)?\s*)
Это соответствует # 3- # 5 и помещает их в соответствующие группы захвата. Однако я не могу понять, почему, когда я добавляю дополнительный ?
в конец, чтобы сделать часть выражения после 01
необязательной, мои группы захвата становятся все более прикольными.
\s*(.*)\s+(\d+)\s*(?:\s*\(?\s*(?:of|-)\s*(\d+)\s*\)?\s*)?
RegEx выше соответствует # 2- # 5, но группы захвата верны только для # 2 и # 5.
Это похоже на прямое регулярное выражение, поэтому я не знаю, почему у меня так много проблем с ним.
Это ссылка на онлайн-оценщик RegEx, который я использую для отладки: http://regexr.com? 2tb64 . Ссылка уже содержит первый RegEx и заполненные тестовые данные.