⊗pyPmRELAB 72 of 129 menu

Pozitīvā un negatīvā izlūkošana Python regulārajās izteiksmēs

Dažreiz ir jāatrisina šāda veida uzdevums: atrast virkni 'aaa' un aizstāt to ar '!', bet tikai tad, ja aiz 'aaa' atrodas 'x', bet pašu 'x' nemaina. Ja mēs mēģināsim atrisināt uzdevumu 'tieši', tad mums nekas neizdosies:

txt = 'aaax baaa' res = re.sub('aaax', '!', txt) print(res) # izvadīs '! baaa', bet vēlējāmies '!x baaa'

Izlūkošana uz priekšu

Lai atrisinātu uzdevumu, ir vajadzīgs veids, kā pateikt, ka 'x' nevajadzētu aizstāt. Tas tiek darīts ar speciālo iekavu (?= ) palīdzību, kas tikai skatās, bet nepaņem līdzi.

Šīs iekavas sauc par pozitīvo izlūkošanu uz priekšu. Pozitīvs - jo 'x' (mūsu gadījumā) ir jāatrodas - tikai tad notiks aizstāšana.

Izmantosim šīs iekavas, lai atrisinātu mūsu uzdevumu:

txt = 'aaax baaa' res = re.sub('aaa(?=x)', '!', txt) print(res) # izvadīs '!x aaab

Pastāv arī negatīvā izlūkošana uz priekšu - (?! ) - tā, gluži pretēji, saka, ka kaut kam nevajadzētu atrasties. Nākamajā piemērā aizstāšana notiks tikai tad, ja aiz 'aaa' atrodas NE 'x':

txt = 'aaax aaab' res = re.sub('aaa(?!x)', '!', txt) print(res) # izvadīs 'aaax !b'

Izlūkošana atpakaļ

Līdzīgi pastāv pozitīvā izlūkošana atpakaļ - (?<= ). Nākamajā piemērā aizstāšana notiks tikai tad, ja pirms 'aaa' atrodas 'x':

txt = 'xaaa' res = re.sub('(?<=x)aaa', '!', txt) print(res) # izvadīs 'x!'

Un pastāv arī negatīvā izlūkošana atpakaļ - (?<! ). Nākamajā piemērā aizstāšana notiks tikai tad, ja pirms 'aaa' neatrodas 'x':

txt = 'baaa' res = re.sub('(?<!x)aaa', '!', txt) print(res) # izvadīs 'b!'

Praktiskie uzdevumi

Dota virkne, kas satur funkciju nosaukumus:

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

Iegūstiet funkciju nosaukumu masīvu no virknes.

Dota virkne ar tagu:

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

Iegūstiet šī taga atribūtu nosaukumu masīvu.

Dota virkne ar mainīgajiem:

txt = '$aaa $bbb $ccc xxxx'

Iegūstiet apakšvirknes, pirms kurām atrodas dolāra zīme.

Latviešu
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Mēs izmantojam sīkdatnes, lai nodrošinātu vietnes darbību, analīti un personalizāciju. Datu apstrāde notiek saskaņā ar Konfidencialitātes politiku.
pieņemt visus iestatīt noraidīt