spacemakerman
@spacemakerman

Как выделить в группу повторяющееся выражение?

661fc48f242db956429475.png

(?<=start)((\".*?\")(,\s*)?)*

Как выделить в группу повторяющееся выражение, чтобы в этой группе не было запятых?
https://regex101.com/r/7eVJFt/1
  • Вопрос задан
  • 154 просмотра
Решения вопроса 1
vhood
@vhood
Не забывайте отмечать решения
Что-бы одна и та же группа в шаблоне сработала в нескольких местах, должно быть несколько match (что-бы каждое такое место обрабатывалось регуляркой "с нуля", как-бы).
В регулярках есть разные движки, теоретически тут можно было бы запустить рекурсию, или поработать с динамическими данными в lookahead/lookbehind, но в python, как я понял, не так уж много фич поддерживается.

Решить в каком-то динамическом виде у меня не получилось. В итоге я скопипастил паттерн некого "хвоста" строки, которая начинается со start (четвертый пример таким образом отпадет) (?:,?\s*(?:(\"[^\"]*\")))? по несколько раз и получил нужный результат (т.е. несколько групп будет в рамках одного match, да и количество групп поддерживается не больше количества скопированного шаблона). Попробовал сократить через DEFINE, но он тоже не поддерживается, видимо. Сделать этот "хвост" именованной группой и использовать ее тоже не получится, т.к. содержимое разное.
Убрать всякие запятые из match так, как это происходит со start, тоже не удастся - lookahead в python не поддерживает квантификаторы.

Как-то так: https://regex101.com/r/7eVJFt/4
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы