Ik heb een reguliere expressie nodig die een zo groot mogelijke match maakt waarbij die match niet gevolgd mag worden door een bepaald karakter, zonder gebruik te maken van Lookahead.
Ik ben hierbij gebonden aan Delphi 2006 voor Win32 in combinatie met de gratis component TRegExpr.
Wat ik wil doen is een inkomende string converteren naar een uitgaande string waarin het aantal herhalingen per karakter is aangegeven. In de inkomende string kan het aantal herhalingen echter ook al zijn aangegeven. Enkele voorbeeldjes:
Het getal tussen haakjes slaat hierbij enkel op het voorgaande karakter.
Om dit te bewerkstelligen lijkt het mij handig om eerst de tekens te vinden die nog geen herhalingsaantal hebben. Daarvoor wil ik een reguliere expressie maken die bv uit AAA(3) de eerste twee A's matcht, of specifieker: die een zo lang mogelijke match van A's maakt die niet gevolgd wordt door een openingshaakje. Het idee daarachter is dat ik, zodra ik een match heb, die match kan vervangen door A(lengte van de match) waarna de volledige string staat in de vorm A(n)A(n)A(n). Daarna is het nog slechts een kwestie van omschrijven naar A(som van alle n's).
Na ongeveer 20 seconden zoekwerk hier op GoT was ik er al achter dat een Lookahead constructie precies doet wat ik wil: het matchen van iets dat niet gevolgd wordt door iets anders. Helaas heeft de TRegExpr component geen ondersteuning voor Lookaround constructies dus moet ik iets anders verzinnen.
Natuurlijk kan ik handmatig door de string heen lopen om dit te doen, maar is dit ook te doen door middel van een regex-replace zonder gebruik te maken van lookahead?
Note: ik heb het probleem enigszins versimpeld. In werkelijkheid gaat hier niet om invoer die iets ingewikkelder is dan enkel een opeenvolging van A's.
Ik ben hierbij gebonden aan Delphi 2006 voor Win32 in combinatie met de gratis component TRegExpr.
Wat ik wil doen is een inkomende string converteren naar een uitgaande string waarin het aantal herhalingen per karakter is aangegeven. In de inkomende string kan het aantal herhalingen echter ook al zijn aangegeven. Enkele voorbeeldjes:
code:
1
2
3
4
| AAA ---> A(3) A(3) ---> A(3) AAA(3) ---> A(5) AA(2)A ---> A(4) |
Het getal tussen haakjes slaat hierbij enkel op het voorgaande karakter.
Om dit te bewerkstelligen lijkt het mij handig om eerst de tekens te vinden die nog geen herhalingsaantal hebben. Daarvoor wil ik een reguliere expressie maken die bv uit AAA(3) de eerste twee A's matcht, of specifieker: die een zo lang mogelijke match van A's maakt die niet gevolgd wordt door een openingshaakje. Het idee daarachter is dat ik, zodra ik een match heb, die match kan vervangen door A(lengte van de match) waarna de volledige string staat in de vorm A(n)A(n)A(n). Daarna is het nog slechts een kwestie van omschrijven naar A(som van alle n's).
Na ongeveer 20 seconden zoekwerk hier op GoT was ik er al achter dat een Lookahead constructie precies doet wat ik wil: het matchen van iets dat niet gevolgd wordt door iets anders. Helaas heeft de TRegExpr component geen ondersteuning voor Lookaround constructies dus moet ik iets anders verzinnen.
Natuurlijk kan ik handmatig door de string heen lopen om dit te doen, maar is dit ook te doen door middel van een regex-replace zonder gebruik te maken van lookahead?
Note: ik heb het probleem enigszins versimpeld. In werkelijkheid gaat hier niet om invoer die iets ingewikkelder is dan enkel een opeenvolging van A's.
The sentence below is true.
The sentence above is false.