Pythontr

husonet | Tarih: 14.09.2015

lookahead regex, lookbehind regex

Düzenli ifadelerde ileriye geriye bakma işlemleri

Programlama ile uğraşıyor iseniz yaptığınız arge lerde mutlaka regex diye ifade ettiğimiz düzenli ifadeler ile karşılaşmışsınızdır. Bu yazımda da düzenli ifade desenleri ile kelime öbeklerininin ileri ve geri kısımlarını belirlemeyi göstermeye çalışacağım ve basit bir şekilde ele almaya çalışacağım.


İşleyeceğimiz başlıklarımız
Kelime öbeğinin baş tarafında desen yok ise kontrolü: (?<!desen)kelimeöbeği

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import re
metin_dizisi = ['uygulayacağım', 'uyguluyorum', 'uyguladım', 'yasayacağım']
rgx = re.compile('(?<!uygul)ayacağım') #ayacağım metnin basinda uygul olmayan stringleri bulur.
for mtn in metin_dizisi:
print "Aranan dizi: %s" %(mtn)
cevap = rgx.findall(mtn)
print "Bulunan: %s" %(cevap)
Aranan dizi: uygulayacağım
Bulunan: []
Aranan dizi: uyguluyorum
Bulunan: []
Aranan dizi: uyguladım
Bulunan: []
Aranan dizi: yasayacağım
Bulunan: ['ayaca\xc4\x9f\xc4\xb1m']

Kelime öbeğinin baş tarafında desen var ise kontrolü: (?<=desen)kelimeöbeği
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import re
metin_dizisi = ['uygulayacağım', 'uyguluyorum', 'uyguladım', 'yasayacağım']
rgx = re.compile('(?<=uygul)ayacağım') #ayacağım metnin basinda uygul olan stringleri bulur.
for mtn in metin_dizisi:
print "Aranan dizi: %s" %(mtn)
cevap = rgx.findall(mtn)
print "Bulunan: %s" %(cevap)
Aranan dizi: uygulayacağım
Bulunan: ['ayaca\xc4\x9f\xc4\xb1m']
Aranan dizi: uyguluyorum
Bulunan: []
Aranan dizi: uyguladım
Bulunan: []
Aranan dizi: yasayacağım
Bulunan: []

Kelime öbeğinin son tarafında desen var ise kontrolü: kelimeöbeği(?=desen)
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import re
metin_dizisi = ['uygulayacağım', 'uyguluyorum', 'uyguladım', 'yasayacağım']
rgx = re.compile('uygul(?=ayacağım)') #uygul metnin sonunda ayacağım olan stringleri bulur.
for mtn in metin_dizisi:
print "Aranan dizi: %s" %(mtn)
cevap = rgx.findall(mtn)
print "Bulunan: %s" %(cevap)
Aranan dizi: uygulayacağım
Bulunan: ['uygul']
Aranan dizi: uyguluyorum
Bulunan: []
Aranan dizi: uyguladım
Bulunan: []
Aranan dizi: yasayacağım
Bulunan: []

Kelime öbeğinin son tarafında desen yok ise kontrolü: kelimeöbeği(?!desen)
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import re
metin_dizisi = ['uygulayacağım', 'uyguluyorum', 'uyguladım', 'yasayacağım']
rgx = re.compile('uygul(?!ayacağım)') #uygul metnin sonunda ayacağım olmayan stringleri bulur.
for mtn in metin_dizisi:
print "Aranan dizi: %s" %(mtn)
cevap = rgx.findall(mtn)
print "Bulunan: %s" %(cevap)
Aranan dizi: uygulayacağım
Bulunan: []
Aranan dizi: uyguluyorum
Bulunan: ['uygul']
Aranan dizi: uyguladım
Bulunan: ['uygul']
Aranan dizi: yasayacağım
Bulunan: []

Biraz karışık gibi duruyor ama biraz çalışarak mantığını kavrayabilirsiniz.