⊗pyPmRELAB 72 of 129 menu

Pozitivní a negativní přehled v regulárních výrazech Pythonu

Někdy je třeba řešit úlohu tohoto typu: najít řetězec 'aaa' a nahradit jej na '!', ale pouze pokud za 'aaa' následuje 'x', přičemž sám 'x' se nenahrazuje. Pokud se pokusíme úlohu řešit 'přímo', nic se nám nepovede:

txt = 'aaax baaa' res = re.sub('aaax', '!', txt) print(res) # vypíše '! baaa', ale chtěli jsme '!x baaa'

Přehled vpřed

K řešení úlohy je potřebný způsob, jak říct, že 'x' by se neměl nahrazovat. To se dělá pomocí speciálních závorek (?= ), které pouze "dívají", ale neberou si obsah s sebou.

Tyto závorky se nazývají pozitivní přehled vpřed. Pozitivní - protože 'x' (v našem případě) musí být - pouze tehdy dojde k nahrazení.

Aplikujme tyto závorky pro řešení naší úlohy:

txt = 'aaax baaa' res = re.sub('aaa(?=x)', '!', txt) print(res) # vypíše '!x aaab

Existuje také negativní přehled vpřed - (?! ) - ten naopak říká, že něco by nemělo být. V následujícím příkladě dojde k nahrazení pouze tehdy, pokud za 'aaa' NEnásleduje 'x':

txt = 'aaax aaab' res = re.sub('aaa(?!x)', '!', txt) print(res) # vypíše 'aaax !b'

Přehled vzad

Podobně existuje pozitivní přehled vzad - (?<= ). V následujícím příkladě dojde k nahrazení pouze tehdy, pokud před 'aaa' stojí 'x':

txt = 'xaaa' res = re.sub('(?<=x)aaa', '!', txt) print(res) # vypíše 'x!'

A také existuje negativní přehled vzad - (?<! ). V následujícím příkladě dojde k nahrazení pouze tehdy, pokud před 'aaa' nestojí 'x':

txt = 'baaa' res = re.sub('(?<!x)aaa', '!', txt) print(res) # vypíše 'b!'

Praktické úlohy

Je dán řetězec obsahující názvy funkcí:

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

Získejte pole názvů funkcí z řetězce.

Je dán řetězec s tagem:

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

Získejte pole názvů atributů tohoto tagu.

Je dán řetězec s proměnnými:

txt = '$aaa $bbb $ccc xxxx'

Získejte podřetězce, před kterými stojí znak dolaru.

Čeština
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяDanskDeutschΕλληνικά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
Používáme soubory cookie pro fungování webu, analýzu a personalizaci. Zpracování údajů probíhá v souladu s Zásadami ochrany osobních údajů.
přijmout vše přizpůsobit odmítnout