⊗pyPmREGL 38 of 129 menu

Beperking van hebzucht in regex in Python

Reguliere expressies zijn standaard hebzuchtig. Dit betekent dat ze de maximaal mogelijke hoeveelheid tekens vastleggen. Laten we dit bekijken aan de hand van een voorbeeld. Stel dat we de volgende string hebben:

txt = 'aeeex zzz x kkk'

In deze string willen we de substring 'aeeex' vinden volgens het volgende patroon: letter 'a', dan elk teken een of meer keer, dan letter 'x':

res = re.sub('a.+x', '!', txt) print(res)

Hoewel we de string '! zzz x kkk' willen krijgen, wordt de string '! kkk' uitgevoerd. De reden is dat onze regex zoekt naar alle tekens van letter 'a' tot letter 'x'. Maar in onze string staan twee letters 'x'! Door de hebzucht gebeurt het dat de regex zoekt tot de allerlaatste x, waardoor hij meer vastlegt dan we nodig hadden.

Natuurlijk is dit gedrag vaak ook wat we nodig hebben. Maar specifiek in dit geval moeten we de hebzucht uitschakelen en de regex vertellen dat hij moet zoeken tot de eerste x. In dit geval moeten we een vraagteken plaatsen na de herhalingsoperator:

res = re.sub('a.+?x', '!', txt) print(res) # geeft de string '! zzz x kkk' weer

Hebzucht kan worden beperkt voor alle herhalingsoperatoren: zowel *, als ?, als {} - zoals dit: *?, ?? en {}?.

Gegeven de string:

txt = 'aba accca azzza wwwwa'

Schrijf een regex die alle strings vindt waar aan de randen de letters 'a' staan, en vervang elk ervan door '!'. Tussen de letters 'a' kan elk teken staan (behalve 'a').

Nederlands
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Wij gebruiken cookies voor de werking van de site, analyse en personalisatie. De verwerking van gegevens gebeurt volgens het Privacybeleid.
alles accepteren aanpassen weigeren