SORU
12 Ocak 2011, ÇARŞAMBA


Python bir dizenin tüm tekrarlamalarını bulmak

Python string.find() string.rfind() dize içinde bir alt dizini.

Belki de kurulan dizinler (sadece ilk başlangıç veya ilk gelen son gelen) dönebilirsiniz string.find_all() gibi bir şey mi var acaba?

Örneğin:

string = "test test test test"

print string.find('test') # 0
print string.rfind('test') # 15

#that's the goal
print string.find_all('test') # [0,5,10,15]

CEVAP
12 Ocak 2011, ÇARŞAMBA


Basit bir yerleşik dize işlevi aradığın ne alakası var, ama daha güçlü regular expressions kullanabilirsiniz:

>>> [m.start() for m in re.finditer('test', 'test test test test')]
[0, 5, 10, 15]

Eğer maçları çakışan bulmak istiyorsanız, lookahead yapar:

>>> [m.start() for m in re.finditer('(?=tt)', 'ttt')]
[0, 1]

Eğer ters bulmak çakışıyor olmadan istiyorsanız, bu gibi bir ifade içine pozitif ve negatif ilerleme birleştirebilirsiniz:

>>> search = 'tt'
>>> [m.start() for m in re.finditer('(?=%s)(?!.{1,%d}%s)' % (search, len(search)-1, search), 'ttt')]
[1]

re.finditer döndürür generator, Bu yüzden değişebilir [] yukarıda () bir jeneratör yerine bir liste çıkar daha verimli eğer sadece ve sadece yineleme aracılığıyla sonuçları bir kez.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • FUzzyBUnnyBOoties

    FUzzyBUnnyBO

    3 EKİM 2007
  • Mindy

    Mindy

    20 NİSAN 2006
  • Phlearn Photoshop and Photography Tutorials

    Phlearn Phot

    11 EKİM 2011