r"\."+".+"+"apple"+".+"+"\."
; Neden bu kadar çok ayrı dizeyi birleştirmek? Sadece r '.. kullanabilirsiniz + elma. +. Her neyse, normal ifadenizdeki sorun açgözlülüktür. Varsayılan olarak x+
, x
ile eşleşebileceği sıklıkta eşleşir. Yani .+
, olabildiğince çok sayıda karakterle (herhangi bir karakter) eşleşecektir; noktalar ve apple
s dahil olmak üzere.
Onun yerine kullanmak istediğiniz, açgözlü olmayan bir ifadedir; Bunu genellikle ?
sonuna ekleyerek yapabilirsiniz: .+?
.
Bu aşağıdaki sonucu elde yapacaktır:
['.I like to eat apple. Me too.']
sen artık elma cümleler ama yine Me too.
hem olsun görebileceğiniz gibi. Bunun nedeni,'dan sonra hala .
'u eşleştirmenizdir, bu da aşağıdaki cümleyi yakalamamanın imkansız olmasını sağlar.
Bir çalışma düzenli ifade bu olacaktır: r'\.[^.]*?apple[^.]*?\.'
İşte
Eğer herhangi karakterden bakma ama değil sadece bu karakterler kendilerini noktalarken. Ayrıca herhangi bir karakterle eşleşmemesine de izin veriyoruz (çünkü ilk cümlede apple
'dan sonra nokta olmayan karakterler yoktur). O ifadeyi kullanarak bu sonuçları:
['.I like to eat apple.', ". Let's go buy some apples."]
+1 güzel cevap! 'txt = txt * 10000' sonra'% timeit' yaparsanız sonuç daha net olur – Kent
Teşekkür Kent. Daha büyük dizeler için bir '% timeit' ölçütü ekledim. – unutbu