10 Ağustos 2013 Cumartesi

Düzenli İfadelerin Derlenmesi

compile() metodu
Bu konumuzda ifadelerimizi düzenledikten sonra işleme koyacağız.Peki bu derlemenin ne farkı var? diye sorarsak;
bilmemiz gereken en önemli özelliği programlarımızın daha hızlı çalışmalarını sağlamak.Tabiki bunu görebilmek için
büyük çapta projelerde çalışıyor olmamız lazım ki şu an için sadece nasıl kullanıldığını öğreneceğiz.

Önceki derslerdeki örnekleri biraz değiştirerek başlayalım:

>>> import re
>>> version=["python2.7","django1.0","php5.0","Android4.0"]
>>> Compiler=re.compile("[a-z]+[0-9]\.[0-9]")
>>> for i in version:
derli=Compiler.search(i)
if derli:
print derli.group()

kodumuz bu şekilde.Şimdi bunu açıklayalım.
İlk iki satır bilindik şeyler asıl iş üçüncü satırdaki "Compiler" değişkeni ile başlıyor.
Bir önceki konumuzda "Compiler" değişkeninde yaptığımız işlemi for döngüsü içinde yapıyorduk ve program her döngüye
başladığında "Compiler" değişkeni tekrar tekrar oluşturuyordu.Fakat burada yaptığımız ise tek bir sefer "Compiler"
değişkenini tanımladıktan sonra for döngüsü içinde kullanmmız gereken sadece search() metodu, bu metodda
aradıklarımızı bulmamızı sağlar.

Kodumuzu çalıştırdığımızda

python2.7
django1.0
php5.0
ndroid4.0

çıktılarını alırız.


compile() ile derleme seçenekleri

re.IGNORECASE veya re.I
Bu alt metodumuz büyük-küçük harf ayrımı yapmamızı sağlıyor.

>>> php=" Hypertext Preprocessor (Türkçe: Üstünyazı Önişlemcisi [1]) (Aslen: Personal Home Page - Kişisel Ana Sayfa) , genelağ için yaratılmış, sunucu taraflı, çok geniş kullanımlı, genel amaçlı, HTML içerisine gömülebilen betik ve programlama dilidir[1]. PHP, ilk kez Rasmus Lerdorf tarafından, web üzerinden sayfasına ziyaret edenleri izlemek amacıyla bir dizi Perl betiği kullanılarak geliştirilmişti. İnsanlar kısa zamanda bununla ilgilenmeye ve bu konuyla ilgili sorular sormaya başladıklarında, Rasmus kararını verdi ve bir betik motoru oluşturdu. Ayrıca formlara da destek verdi ve böylece PHP/F1'i biçimlendirmiş oldu. Adını duyurdukça bir grup yazılım geliştirmecinin dikkatini çekti ve böylece bir API oluşturuldu ve PHP3 ortaya çıktı. Daha sonraları yeniden ele alınması gerekti ve Zend motoru PHP4'ü yaratmış oldu. Artık PHP önünde pek engel bulunmuyordu, böylece PHP daha ünlenmeye başladı. Günümüzde PHP, bloglardan forumlara, portal sistemlerinden veri tabanlarına, yapay sinir ağlarından matematiksel sistemlere, sınıflardan fonksiyonlara her türlü işlevde kullanılır."
>>> derle=re.compile("PHP",re.IGNORECASE)
>>> print derle.findall(php)

şeklindeki kodumuzun çıktısı

['PHP', 'PHP', 'PHP', 'PHP', 'PHP', 'PHP', 'PHP']

olur.Örneği şu şekilde ve daha faklı şekillerde de kullanabiliriz.

>>> derle=re.compile("PHP+[0-9]",re.IGNORECASE)
>>> print derle.findall(php)

bu kodumuzun şıktısı ise

['PHP3', 'PHP4']

olacaktır.Bundan daha fazlası sizin ihtaycınıza kalmış.
php adlı yazı http://tr.wikipedia.org/wiki/PHP adresinden alınmıştır.

re.DOTALL veya re.S
Bu alt metodumuz ise "." sembolünü string olarak kabul ederek istediğimiz ifadeyi diğer satırlardada aramamızı sağlar

>>> example="deneme python.\n deneme python"
>>> print re.search("python.*",example).group()

şeklindeki kodumuz "." sembolünün gerçek rolünün kullanıldığı bir örnek ve sonucu da şu şekilde:

python.

Gördüğümüz gibi "\n" ifadesine kadar arama yaptı bir alt satıra geçip oradaki "python" ifadesini aramadı.
Şimdi bizim öğreneceğimiz kodu buna uyarlıyalım.

>>> example="deneme python.\n deneme python"
>>> derle=re.compile("python.*",re.DOTALL)
>>> nesne=derle.search(example)
>>> if nesne:
print nesne.group()

kodumuz bu şekilde ve sonucumuz ise

python.
 deneme python

re.UNICODE veya re.U
Tükrçe programlar yazabilmemiz için diğer seçeneklerden biri

>>> list=["şeker","şey","ğ","çatal","python"]
>>> for i in list:
nesne=re.search("\w*",i)
if nesne:
print nesne.group()

kodlarımız bize içinde Türkçe karakter bulunduğu için bize "php" ifadesinden başka bir sonuç döndürmeyecek.
Fakat kodumuzu şu şekilde düzeltirsek

>>> list=["şeker","şey","ğ","çatal"]
>>> derle=re.compile("\w*",re.UNICODE)
>>> for i in list:
nesne=derle.search(i)
if nesne:
print nesne.group()

bize Türkçe karakterdede arama olanağı sağlayacaktır.
Sonucumuz

şeker
şey
ğ
çatal
python