Pengkuantiti
Ayuh, teruskan mendalami pemahaman anda tentang ungkapan biasa Dalam bahagian ini, mari kita fahami pengkuantiti dan mengapa kita menggunakan pengkuantiti Jika anda ingin memadankan berpuluh atau ratusan aksara, adakah anda perlu menulisnya satu per satu satu, jadi hanya Pengkuantiti muncul.
Leksikon pengkuantiti ialah: {min, maks}. min dan maks kedua-duanya adalah integer bukan negatif. Jika koma hadir dan maks ditinggalkan, maka maks tidak mempunyai had. Jika kedua-dua koma dan maks ditinggalkan, ulangi masa min. Contohnya, b[1-9][0-9]{3}b memadankan nombor antara 1000 dan 9999 (“b” mewakili sempadan perkataan), manakala b[1-9][0-9]{ 2,4} b, sepadan dengan nombor antara 100 ~ 99999.
Mari kita lihat contoh di bawah untuk memadankan 4 hingga 7 huruf dalam rentetan dalam bahasa Inggeris
import re a = 'java*&39android##@@python' # 数量词 findall = re.findall('[a-z]{4,7}', a) print(findall)
Hasil keluaran:
['java', 'android', 'python']
Perhatikan bahawa terdapat tamak dan tidak tamak di sini. Jadi mari kita lihat konsep yang berkaitan dahulu:
Mod tamak: Cirinya ialah membaca keseluruhan rentetan sekali gus Jika tidak sepadan, ludahkan aksara paling kanan dan kemudian padankan sehingga rentetan atau rentetan yang sepadan ditemui. sehingga panjangnya ialah 0. Tujuannya adalah untuk membaca seberapa banyak aksara yang mungkin, jadi ia kembali serta-merta apabila ia membaca padanan pertama.
Mod malas: Cirinya ialah ia bermula dari sebelah kiri rentetan dan cuba memadankan tanpa membaca aksara dalam rentetan Jika gagal, ia akan membaca satu lagi aksara dan padan semula apabila a Padanan ditemui. Rentetan yang dipadankan, kemudian padan semula sehingga akhir rentetan.
Contoh di atas adalah tamak Bagaimana jika anda ingin menggunakan tidak tamak, iaitu mod malas?
Jika anda ingin menggunakan tidak tamak, tambahkan ?, contoh di atas diubah suai seperti berikut:
import re a = 'java*&39android##@@python' # 贪婪与非贪婪 re_findall = re.findall('[a-z]{4,7}?', a) print(re_findall)
Hasil output adalah seperti berikut:
['java', 'andr', 'pyth']
Seperti yang dapat dilihat dari hasil output, android hanya mencetak kecuali andr , Python hanya mencetak kecuali pyth, kerana mod Lazy digunakan di sini.
Sudah tentu, terdapat beberapa watak istimewa yang juga boleh menyatakan kuantiti, seperti:
?:告诉引擎匹配前导字符 0 次或 1 次 +:告诉引擎匹配前导字符 1 次或多次 *:告诉引擎匹配前导字符 0 次或多次
Untuk meringkaskan mata pengetahuan dalam bahagian ini, ia adalah jadual berikut:
Takut | Malas | Huraikan |
? | ? ? | Sifar atau satu kejadian, bersamaan dengan {0,1} |
+ | +? | muncul satu kali atau lebih, yang bersamaan dengan {1,} |
* | *? | muncul sifar atau lebih kali, yang bersamaan dengan {0,} |
{n} | {n}? | berlaku tepat n kali |
{n,m} | {n,m}? | Sekurang-kurangnya n cawangan muncul lebih daripada m kali |
{n,} | {n,}? | Sekurang-kurangnya n kali |