⊗pyPmREGL 38 of 129 menu

Membatasi Keserakahan dalam Regex di Python

Ekspresi reguler secara default bersifat serakah. Ini berarti mereka akan mengambil jumlah karakter sebanyak mungkin yang tersedia. Mari kita bahas dengan contoh. Misalkan kita memiliki string seperti ini:

txt = 'aeeex zzz x kkk'

Dalam string ini, kita ingin menemukan substring 'aeeex' dengan pola berikut: huruf 'a', diikuti oleh karakter apa pun satu kali atau lebih, lalu huruf 'x':

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

Meskipun kita ingin mendapatkan string '! zzz x kkk', yang dicetak adalah string '! kkk'. Masalahnya adalah regex kita mencari semua karakter dari huruf 'a' hingga huruf 'x'. Tetapi dalam string kita ada dua huruf 'x'! Karena keserakahan, ternyata regex mencari hingga huruf x yang terakhir, sehingga mengambil bagian yang bukan yang kita inginkan.

Tentu saja, seringkali perilaku seperti ini justru kita butuhkan. Namun khusus dalam kasus ini, kita perlu menonaktifkan keserakahan dan memberi tahu regex untuk mencari hingga huruf x pertama. Dalam hal ini kita harus menambahkan tanda tanya setelah operator pengulangan:

res = re.sub('a.+?x', '!', txt) print(res) # akan mencetak string '! zzz x kkk'

Keserakahan dapat dibatasi untuk semua operator pengulangan: baik *, ?, maupun {} - seperti ini: *?, ?? dan {}?.

Diberikan string:

txt = 'aba accca azzza wwwwa'

Tulislah sebuah regex yang akan menemukan semua string yang diapit oleh huruf 'a', dan mengganti setiap string tersebut dengan '!'. Di antara huruf 'a' boleh terdapat karakter apa pun (kecuali 'a').

Indonesia
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Kami menggunakan cookie untuk operasi situs, analitik, dan personalisasi. Pemrosesan data dilakukan sesuai dengan Kebijakan Privasi.
terima semua atur tolak