⊗pyPmREGL 38 of 129 menu

Python'da Düzenli İfadelerde Açgözlülüğü Sınırlama

Düzenli ifadeler varsayılan olarak açgözlüdür. Bu, mümkün olan en fazla karakteri yakaladıkları anlamına gelir. Bir örnekle inceleyelim. Diyelim ki elimizde şöyle bir dize var:

txt = 'aeeex zzz x kkk'

Bu dizede, 'aeeex' alt dizesini şu kalıba göre bulmak istiyoruz: 'a' harfi, ardından herhangi bir karakter bir veya daha fazla kez, ardından 'x' harfi:

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

'! zzz x kkk' dizesini elde etmemiz gerekirken, '! kkk' dizesi yazdırılacaktır. Bunun nedeni, düzenli ifademizin 'a' harfinden 'x' harfine kadar olan tüm karakterleri aramasıdır. Ancak dizimizde iki tane 'x' harfi var! Açgözlülük nedeniyle, düzenli ifade sonuncu 'x'e kadar arama yapar ve böylece aslında ihtiyacımız olmayan kısmı da yakalamış olur.

Elbette, çoğu zaman bu davranış tam da ihtiyacımız olan şeydir. Ancak bu özel durumda açgözlülüğü iptal etmemiz ve düzenli ifadeye ilk 'x'e kadar arama yapmasını söylememiz gerekir. Bu durumda, tekrarlama operatöründen sonra soru işareti konulmalıdır:

res = re.sub('a.+?x', '!', txt) print(res) # '! zzz x kkk' dizesini yazdırır

Açgözlülük tüm tekrarlama operatörleri için sınırlandırılabilir: *, ? ve {} - şu şekilde: *?, ?? ve {}?.

Şu dize verilmiştir:

txt = 'aba accca azzza wwwwa'

Kenarlarında 'a' harfleri bulunan tüm dizeleri bulacak ve her birini '!' ile değiştirecek bir düzenli ifade yazın. 'a' harfleri arasında ('a' hariç) herhangi bir karakter bulunabilir.

Türkçe
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenЎзбекOʻzbekTiếng Việt
Web sitesinin çalışması, analiz ve kişiselleştirme için çerezleri kullanıyoruz. Veri işleme, Gizlilik Politikası'na uygun olarak gerçekleşir.
tümünü kabul et özelleştir reddet