>>> match = re.findall('a.*?a', 'a 1 a 2 a 3 a 4 a')
>>> match
['a 1 a', 'a 3 a']
yazdırmak re.findall!Python nasıl</p> <pre><code>['a 1 a', 'a 2 a', 'a 3 a', 'a 4 a'] </code></pre> <p>teşekkür ederiz yazdırmak için ben alırım bütün desenleri
>>> match = re.findall('a.*?a', 'a 1 a 2 a 3 a 4 a')
>>> match
['a 1 a', 'a 3 a']
yazdırmak re.findall!Python nasıl</p> <pre><code>['a 1 a', 'a 2 a', 'a 3 a', 'a 4 a'] </code></pre> <p>teşekkür ederiz yazdırmak için ben alırım bütün desenleri
ben hile yapmak gerekir bir pozitif ileri yönlü onaylama işlemi kullanarak düşünüyorum:
>>> re.findall('(?=(a.*?a))', 'a 1 a 2 a 3 a 4 a')
['a 1 a', 'a 2 a', 'a 3 a', 'a 4 a']
re.findall
döner regex tüm gruplar - göz-aheads de dahil. Bu, ileriye bakma iddiasının herhangi bir dizeyi tüketmemesi nedeniyle işe yarar. örtüşen eşleşmeleri verir
r = re.compile('a.*?a') # as we use it multiple times
matches = [r.match(s[i:]) for i in range(len(s))] # all matches, if found or not
matches = [m.group(0) for m in matches if m] # matching string if match is not None
print matches
['a 1 a', 'a 2 a', 'a 3 a', 'a 4 a']
En iyi çözüm ise bilmiyorum verir ama burada her verilen desenle eşleşen dizenin sonuna kadar ulaşan alt dize test edin.
Sen alternatif regex
modülünü kullanabilirsiniz:
>>> regex.findall('a.*?a', 'a 1 a 2 a 3 a 4 a', overlapped = True)
['a 1 a', 'a 2 a', 'a 3 a', 'a 4 a']
Güzel olacak yapmanın yolu olduğunu/bu modül hiç varsayılan değiştirir 're' modülü –
eğer @JonClements Evet! Onu çok isterim. Bu modülün sunduğu tüm faydalara, aynı zamanda iyi desteklenmektedir. Bir hata buldum ve modül geliştiricisine bildirdim. 24 saat içinde tamir edildi. – ovgolovin
da onu aradı ve "regex" modülünün "re" den daha iyi olduğunu asla bilemedi. –
Bu 1 –