Thanks to anyone that will try to help me.
I struggle into making a regex that can do this case :
I want every match of "Heure Pleine Saison Basse" that occur after the first occurence of "Acheminement conso".
Using the raw text below, i want to match "Heure Pleine Saison Basse" 3 4 5 6 7 and not 1 & 2.
Do not use the number inside characted recognition, it is just here to help you uderstand which chain i want to match
This example regex only match the last occurrence :
Acheminement[\s\S]*(Heure Pleine Saison Basse)
Here is a great raw text example :
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
CodePudding user response:
You can use
'/(?:\G(?!\A)|Acheminement conso)[\s\S]*?\KHeure Pleine Saison Basse/u'
'/(?:\G(?!\A)|Acheminement conso).*?\KHeure Pleine Saison Basse/su'
See the regex demo. Details:
(?:\G(?!\A)|Acheminement conso)
- eitherAcheminement conso
or the end of the previous match (\G(?!\A)
is matching what\G
operator matches except the position at the start of string that is "cancelled" with the(?!\A)
negative lookahead)[\s\S]*?
- any zero or more chars as few as possible\K
- omit the text matched so farHeure Pleine Saison Basse
- a fixed string.
The u
flag is necessary when you have to deal with Unicode strings.
The s
flag is useful to make .
match any characters including line breaks.