⊗pyPmREGL 38 of 129 menu

Menghadkan Ketamakan dalam Regex di Python

Ungkapan biasa secara lalai adalah tamak. Ini bermakna ia akan menangkap jumlah aksara maksimum yang mungkin. Mari kita lihat contoh. Katakan kita mempunyai tali seperti berikut:

txt = 'aeeex zzz x kkk'

Dalam tali ini, kita ingin mencari sub-tali 'aeeex' berdasarkan pola berikut: huruf 'a', kemudian sebarang aksara satu atau lebih kali, kemudian huruf 'x':

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

Walaupun kita ingin mendapatkan tali '! zzz x kkk', yang akan dipaparkan ialah tali '! kkk'. Ini kerana regex kita mencari semua aksara dari huruf 'a' hingga huruf 'x'. Tetapi dalam tali kita terdapat dua huruf 'x'! Disebabkan ketamakan, regex akan mencari sehingga huruf 'x' yang terakhir, sekaligus menangkap lebih daripada yang kita perlukan.

Sudah tentu, selalunya tingkah laku ini adalah yang kita kehendaki. Tetapi khusus dalam kes ini, kita perlu membatalkan ketamakan dan memberitahu regex supaya ia berhenti pada huruf 'x' yang pertama. Dalam kes ini tanda soal harus diletakkan selepas operator pengulangan:

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

Ketamakan boleh dihadkan untuk semua operator pengulangan: sama ada *, ?, atau {} - seperti ini: *?, ?? dan {}?.

Diberi tali:

txt = 'aba accca azzza wwwwa'

Tuliskan ungkapan biasa yang akan mencari semua tali yang diapit oleh huruf 'a', dan menggantikan setiap satu daripadanya dengan '!'. Antara huruf 'a' boleh terdapat sebarang aksara (kecuali 'a').

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