Сопоставьте несколько одинаковых вхождений после одной конкретной цепочки символов REGEX

Спасибо всем, кто попытается мне помочь. Я изо всех сил пытаюсь создать регулярное выражение, которое может сделать этот случай:
Я хочу, чтобы каждое совпадение "Heure Pleine Saison Basse" происходило после первого появления "Acheminement conso".

Используя необработанный текст ниже, я хочу сопоставить "Heure Pleine Saison Basse" 3 5 6 7, а не 1 и 2.
Не используйте номер внутри символьного распознавания, он просто здесь, чтобы помочь вам понять, какую цепочку я хочу сопоставить.

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

Acheminement[\s\S]*(Heure Pleine Saison Basse)

Вот отличный пример необработанного текста:

Electricité n° de\n
compteur ancien\n
index nouvel\n
index conso\n
kWh/Qté prix unitaire\n
HT en euros montant HT\n
en euros taux de\n
TVA\n
Contribution cee du 14/07/22 au 13/08/22 143020,00495 70,7920,0%\n
Evolutions arenh du 14/07/22 au 13/08/22 14302-0,03149 -450,3720,0%\n
Consommation  du 14/07/22 au 13/08/22 154\n
Heure Pleine Saison Basse 1
Heure Pleine Saison Basse 2
Heure Creuse Saison Basse 2
Acheminement conso\n
kWh/Qté prix unitaire\n
HT en euros montant HT\n
en euros taux de\n
TVA\n
Composante de comptage du 1
Composante de comptage du 2
Composante de soutirage du 1
Composante de soutirage du 2
Composante de gestion 1
Composante de gestion 2
Consommation du 14/07/22 au 31/07/22 Heure Pleine Saison Basse 56200,02000 112,4020,0%\n
Heure Creuse Saison Basse 26840,01700 45,6320,0%\n
Consommation du 01/08/22 au 13/08/22\n
Heure Pleine Saison Basse 3
Heure Creuse Saison Basse 4
Heure Pleine Saison Basse 5
Heure Pleine Saison Basse 6
Heure Pleine Saison Basse 7
Services et prestations techniques conso\n
kWh/Qté prix unitaire\n
HT en euros montant HT\n
en euros taux de\n
TVA\n
Espace Client Gratuit\n
Taxes et Contributions conso\n

Нравится /(?:\G(?!\A)|Acheminement conso)[\s\S]*?\KHeure Pleine Saison Basse/u? См. regex101.com/r/GNx87r/1

Wiktor Stribiżew 02.02.2023 09:34

Это работает, вы потрясающие, вы можете опубликовать это как ответ, чтобы я мог пометить его как принятый ответ

ThomasL 02.02.2023 09:45

Было бы невероятно, если бы вы нашли время, чтобы немного объяснить это, чтобы я мог лучше понять, какую технику вы использовали :)

ThomasL 02.02.2023 09:46

Это регулярное выражение удивительно.

Tim Biegeleisen 02.02.2023 09:54
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
4
62
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете использовать

'/(?:\G(?!\A)|Acheminement conso)[\s\S]*?\KHeure Pleine Saison Basse/u'
'/(?:\G(?!\A)|Acheminement conso).*?\KHeure Pleine Saison Basse/su'

Посмотрите демонстрацию регулярного выражения . Подробности:

  • (?:\G(?!\A)|Acheminement conso) - либо Acheminement conso, либо конец предыдущего совпадения (\G(?!\A) соответствует тому, что соответствует оператору \G, за исключением позиции в начале строки, которая «отменяется» с отрицательным опережением (?!\A))
  • [\s\S]*? - любые ноль или более символов как можно меньше
  • \K - опустить текст совпавший до сих пор
  • Heure Pleine Saison Basse - фиксированная строка.

Флаг u необходим, когда вам приходится иметь дело со строками Unicode. Флаг s полезен для того, чтобы . соответствовал любым символам, включая разрывы строк.

Если бы я мог. У меня есть аналогичный вариант использования с событием в конце: Если я опишу его: Сопоставьте все «пуанты» между «Обязательство Capacité» и «Acheminement conso». Здесь первые 2 совпадения верны, а третье не очень хорошо и может быть предотвратить возникновение "Acheminement conso" regex101.com/r/SOsd3y/1

ThomasL 02.02.2023 13:00

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

ThomasL 02.02.2023 13:04

@ThomasL Думаю, вам нужно что-то вроде regex101.com/r/SOsd3y/2

Wiktor Stribiżew 02.02.2023 13:04

Это работает, потрясающе! но это тоже работает regex101.com/r/zgeKmK/1 Итак, почему вы добавили эту группу (?:(?!Обязательство Capacité)[\s\S]) ? Я прошу лучше понять ваше мышление, не потому что я считаю его неправильным :)

ThomasL 02.02.2023 13:05

@ThomasL Умеренный жадный токен используется, чтобы убедиться, что совпадение происходит только между ближайшим A и любым крайним правым B. Вы можете игнорировать это ограничение. Смотрите эту тему, чтобы понять это.

Wiktor Stribiżew 02.02.2023 13:16

Другие вопросы по теме