Saya memiliki kode python seperti ini:

a = 'xyxy123'
b = re.findall('x*',a)
print b

Ini adalah hasilnya:

['x', '', 'x', '', '', '', '', '']  

Kenapa b memiliki delapan elemen sedangkan a hanya memiliki tujuh karakter?

0
向明辉 8 Agustus 2017, 09:33

2 jawaban

Jawaban Terbaik

Ada delapan "titik" dalam string:

|x|y|x|y|1|2|3|

Masing-masing adalah lokasi di mana regex bisa dimulai. Karena regex Anda menyertakan string kosong (karena x* memungkinkan 0 salinan x), setiap tempat menghasilkan satu kecocokan, dan kecocokan itu akan ditambahkan ke daftar di b. Pengecualian adalah dua tempat yang memulai pertandingan lebih lama, x; seperti dalam jawaban msalperen,

Pertandingan kosong termasuk dalam hasil kecuali jika mereka menyentuh awal pertandingan lain,

Jadi kecocokan kosong di lokasi pertama dan ketiga tidak disertakan.

1
perigon 8 Agustus 2017, 06:54

Menurut dokumentasi python (https://docs.python.org/2/library/re .html):

re.findall mengembalikan semua kecocokan pola yang tidak tumpang tindih dalam string, sebagai daftar string. String dipindai dari kiri ke kanan, dan kecocokan dikembalikan dalam urutan yang ditemukan. Jika satu atau lebih grup ada dalam pola, kembalikan daftar grup; ini akan menjadi daftar tupel jika polanya memiliki lebih dari satu grup. Pertandingan kosong disertakan dalam hasil kecuali jika mereka menyentuh awal pertandingan lain.

Jadi ia mengembalikan semua hasil yang cocok dengan x*, termasuk yang kosong.

0
msalperen 8 Agustus 2017, 06:58