⊗pyPmREGL 38 of 129 menu

Gierbegrenzung in Regex in Python

Reguläre Ausdrücke sind standardmäßig gierig. Das bedeutet, dass sie die maximal mögliche Anzahl an Zeichen erfassen. Lassen Sie uns das an einem Beispiel untersuchen. Angenommen, wir haben folgende Zeichenkette:

txt = 'aeeex zzz x kkk'

In dieser Zeichenkette möchten wir die Teilzeichenkette 'aeeex' nach folgendem Muster finden: Buchstabe 'a', dann ein beliebiges Zeichen ein- oder mehrmals, dann Buchstabe 'x':

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

Obwohl wir die Zeichenkette '! zzz x kkk' erhalten möchten, wird die Zeichenkette '! kkk' ausgegeben. Der Grund liegt darin, dass unser Regex-Ausdruck alle Zeichen vom Buchstaben 'a' bis zum Buchstaben 'x' sucht. Aber in unserer Zeichenkette gibt es zwei Buchstaben 'x'! Aufgrund der Gier stellt sich heraus, dass der Regex-Ausdruck bis zum letzten 'x' sucht, wodurch er nicht das erfasst, was wir brauchten.

Natürlich ist dieses Verhalten oft genau das, was wir brauchen. Aber in diesem speziellen Fall müssen wir die Gier deaktivieren und dem Regex-Ausdruck mitteilen, dass er bis zum ersten 'x' suchen soll. In diesem Fall sollte nach dem Wiederholungsoperator ein Fragezeichen gesetzt werden:

res = re.sub('a.+?x', '!', txt) print(res) # gibt die Zeichenkette '! zzz x kkk' aus

Die Gier kann bei allen Wiederholungsoperatoren eingeschränkt werden: sowohl bei *, als auch bei ?, und {} - so: *?, ?? und {}?.

Gegeben sei die Zeichenkette:

txt = 'aba accca azzza wwwwa'

Schreiben Sie einen Regex-Ausdruck, der alle Zeichenketten findet, an deren Rändern die Buchstaben 'a' stehen, und jede davon durch '!' ersetzt. Zwischen den Buchstaben 'a' kann ein beliebiges Zeichen stehen (außer 'a').

Deutsch
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Wir verwenden Cookies für den Betrieb der Website, Analyse und Personalisierung. Die Datenverarbeitung erfolgt gemäß der Datenschutzerklärung.
alle akzeptieren anpassen ablehnen