⊗pyPmRELAB 72 of 129 menu

Positiv- und Negativ-Lookahead in Python Regex

Manchmal steht man vor einer Aufgabe dieser Art: finde den String 'aaa' und ersetze ihn durch '!', aber nur wenn nach 'aaa' ein 'x' folgt, wobei das 'x' selbst nicht ersetzt werden soll. Wenn wir versuchen, die Aufgabe 'direkt' zu lösen, wird es nicht gelingen:

txt = 'aaax baaa' res = re.sub('aaax', '!', txt) print(res) # gibt '! baaa' aus, aber gewünscht war '!x baaa'

Lookahead

Um die Aufgabe zu lösen, brauchen wir eine Möglichkeit zu sagen, dass das 'x' nicht ersetzt werden soll. Dies wird mit Hilfe spezieller Klammern (?= ) erreicht, die nur prüfen, aber nicht mit aufnehmen.

Diese Klammern werden Positiv-Lookahead genannt. Positiv - weil das 'x' (in unserem Fall) vorhanden sein muss - nur dann wird die Ersetzung durchgeführt.

Lassen Sie uns diese Klammern zur Lösung unserer Aufgabe anwenden:

txt = 'aaax baaa' res = re.sub('aaa(?=x)', '!', txt) print(res) # gibt '!x baaa' aus

Es gibt auch den Negativ-Lookahead - (?! ) - dieser sagt im Gegensatz dazu, dass etwas nicht vorhanden sein darf. Im folgenden Beispiel wird die Ersetzung nur durchgeführt, wenn nach 'aaa' KEIN 'x' folgt:

txt = 'aaax aaab' res = re.sub('aaa(?!x)', '!', txt) print(res) # gibt 'aaax !b' aus

Lookbehind

Analog dazu gibt es den Positiv-Lookbehind - (?<= ). Im folgenden Beispiel wird die Ersetzung nur durchgeführt, wenn vor 'aaa' ein 'x' steht:

txt = 'xaaa' res = re.sub('(?<=x)aaa', '!', txt) print(res) # gibt 'x!' aus

Und es gibt auch den Negativ-Lookbehind - (?<! ). Im folgenden Beispiel wird die Ersetzung nur durchgeführt, wenn vor 'aaa' kein 'x' steht:

txt = 'baaa' res = re.sub('(?<!x)aaa', '!', txt) print(res) # gibt 'b!' aus

Praktische Aufgaben

Gegeben ist ein String, der Funktionsnamen enthält:

txt = 'func1() func2() func3()'

Erhalten Sie ein Array der Funktionsnamen aus dem String.

Gegeben ist ein String mit einem Tag:

txt = '<a href="" class="eee" id="zzz">'

Erhalten Sie ein Array der Attributnamen dieses Tags.

Gegeben ist ein String mit Variablen:

txt = '$aaa $bbb $ccc xxxx'

Erhalten Sie die Teilzeichenfolgen, denen ein Dollar-Zeichen vorausgeht.

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