Positiewe en negatiewe vooruitsig in Python gereelde uitdrukkings
Soms moet jy 'n taak van hierdie tipe oplos:
vind die string 'aaa' en vervang dit
met '!', maar slegs as na
'aaa' 'x' volg, terwyl
'x' self nie vervang word nie. As ons
probeer om die taak 'reguit' op te los,
sal ons nie slaag nie:
txt = 'aaax baaa'
res = re.sub('aaax', '!', txt)
print(res) # sal '! baaa' uitdruk, maar ons wou '!x baaa' hê
Vooruitsig
Om die taak op te los, is 'n manier nodig om te sê
dat 'x' nie vervang moet word nie. Dit word
gedoen met behulp van spesiale hakies (?= ),
wat net kyk, maar nie met hulle saamneem nie.
Hierdie hakies word positiewe vooruitsig
genoem. Positief - want 'x'
(in ons geval) moet teenwoordig wees - slegs dan
sal vervanging plaasvind.
Laat ons hierdie hakies toepas om ons taak op te los:
txt = 'aaax baaa'
res = re.sub('aaa(?=x)', '!', txt)
print(res) # sal '!x baaa' uitdruk
Daar is ook negatiewe vooruitsig
- (?! ) - dit sê, teenoorgesteld,
dat iets nie teenwoordig moet wees nie. In die volgende
voorbeeld sal vervanging slegs plaasvind as
na 'aaa' NIE 'x' volg nie:
txt = 'aaax aaab'
res = re.sub('aaa(?!x)', '!', txt)
print(res) # sal 'aaax !b' uitdruk
Agteruitsig
Op soortgelyke wyse is daar positiewe
agteruitsig - (?<= ). In die
volgende voorbeeld sal vervanging slegs plaasvind as
voor 'aaa' 'x' staan:
txt = 'xaaa'
res = re.sub('(?<=x)aaa', '!', txt)
print(res) # sal 'x!' uitdruk
En daar is ook negatiewe agteruitsig
- (?<! ). In die volgende voorbeeld
sal vervanging slegs plaasvind as voor
'aaa' nie 'x' staan nie:
txt = 'baaa'
res = re.sub('(?<!x)aaa', '!', txt)
print(res) # sal 'b!' uitdruk
Praktiese take
Gegee 'n string wat funksienames bevat:
txt = 'func1() func2() func3()'
Kry 'n lys van funksienames uit die string.
Gegee 'n string met 'n etiket:
txt = '<a href="" class="eee" id="zzz">'
Kry 'n lys van die eienskapsname van hierdie etiket.
Gegee 'n string met veranderlikes:
txt = '$aaa $bbb $ccc xxxx'
Kry die substringe wat deur 'n dollarteken voorafgegaan word.