17 Temmuz 2013 Çarşamba

Özel Diziler


Boşluk Karakterinin Yerini Turan Dizi: \s

Bu ifade karakter dizimizdeki boşluk karakterini bulmamızı sağlar.

import re
language=["python programlama","django web programlama","php web programlama","Android"]
for i  in language:
sonuc=re.search("[A-Za-z]+\s[A-Za-z]+",i)
if sonuc:
print sonuc.group()

kodlarını çalıştırdığımızda bizi vereceği karakter dizileri aşağıdaki gibidir;

python programlama
django web
php web

Gördüğünüz gibi bize burada boşluk ifadesinin kullanıldığı karakter dizileri geri döndürüldü.

Ondalık Sayıların Yerini Tutan Dizi: \d

Bu ifade karakter dizimizdeki ondalık sayı karakterini bulmamızı sağlar.
Örneği önceki derslerimizde şöyle bir ifade kullanıyorduk

karakter_dizisi=re.search("[0-9][A-Za-z]")

şeklinde ifade kullanmıştık.Buradaki amaç sayı ile başlayan ve harf karakterleriyle devam eden karakter dizilerini bulmaktı. İşte kodumuz tam burada öne çıkıyor.

version=["php5","python 2","python3","CSS 3","HTML5"]
for i in version:
sonuc = re.search("[A-Za-z]+\d+",i)
if sonuc:
print sonuc.group()

yukarıdaki kodumuz bize sonu sayı ile biten karakter dizilerini verecektir.

php5
python3
HTML5

Gördüğünüz gibi sonu sayısal ifade olan karakter dizilerimizi kolaylıkla bulduk.
Ama diyelim ki biz "CSS 3" bulmak istiyoruz.Küçük bir değişiklik ile onuda kolaylıkla bulabilir.

for i in version:
sonuc = re.search("[A-Za-z]+\s\d+",i)
if sonuc:
print sonuc.group()

kodunu çalıştırdığımızda bize çıktı olarak

python 2
CSS 3

2 çıktı verecektir.Burada dikkat edilmesi gereken kod => sonuc = re.search("[A-Za-z]+\s\d+",i)
Çünkü bu kodun içindeki boşluk(\s) dizisini sayısal ifade(\d) dizisinden sonra yazarsak, önce sayısal ifade arayacak sonra boşluk ifadesini arayacak.Fakat bizin karakter dizilerimiz içinde böyle bir karakter dizisi bulunmadığı için sonuç boş dönecektir.Bunu denemek için

for i in version:
sonuc = re.search("[A-Za-z]+\d\s+",i)
if sonuc:
print sonuc.group()

kodunu çalıştırarak sonucu görebilirsiniz.

Alfanümerik Karakterlerin Yerini Tutan Özel Dizi: \w

Bu ifade karakter dizimizdeki alfanümerik karakterleri ve "_" karakterini bulmamızı sağlar.

alfanumerik = "yukonit12_$"
print re.search("\w*",alfanumerik).group()

Yukarıdaki kodumuzu çalıştırdığımızda bize alfanumerik olmayan bir karaktere kadar olan alfanumerik karakter dizisini verdi.
Cümle biraz karışık gibi oldu ama bir sonraki örnekte daha iyi anlaşılacağını umuyorum.Bu kodumuzun çıktısı;

yukonit12_


Diğer bir örnek olarak şu kodlarımızı yazalım.

alfanumerik="yukonit12_python_$_php_%_asp"
print re.search("\w*",alfanumerik).group()

Kodlarımız bunlar şimdi bu kodlarımızı çalıştıralım ve sonucu görelim.

yukonit12_python_

Gördüğünüz gibi yukarıda bahsettitğim " bize alfanumerik olmayan bir karaktere kadar olan alfanumerik karakter dizisi " olayı
umarım burada daha iyi anlaşılmıştır.

Dersimizin sonuna gelmeden önce şu soruyu sorabiliriz: Peki bu harfleri büyük yazarsak ne olur?

"\s" ifadesi boşluk karakterinin yerini bulmamızı sağlarken, "\S" ifadesi boşluk karakteri olmayan karakter dizilerini bulmamızı sağlar.
"\d" ifadesi ondalık sayı karakterinin yerini bulmamızı sağlarken, "\D" ifadesi ondalık sayı karakteri olmayan karakter dizilerini bulmamızı sağlar.
"\w" ifadesi alfanümerik ve "_ "karakterinin yerini bulmamızı sağlarken, "\W" ifadesi alfanümerik olmayan ve " _ " karakteri bulunmayan karakter dizilerini bulmamızı sağlar.

Bunlarla ilgili örnekleri size bırakıyorum.Hatta bu dersteki örnekler üzerinde denerseniz sizin içi daha faydalı olur.
Bir sonraki derste görüşmek üzere...

10 Temmuz 2013 Çarşamba

Eşleşme Nesnelerinin Metodları

Group() metodu
Bu metodu daha önce işlediğimiz düzenli ifadelerde kullanmıştık.
Bu bölümde başka bir özelliğine daha değineceğiz.Bu özellik ise
bir karakter dizisini gruplamamızı sağlaması.

improt re
gruplanacak_yazi="django python dilinin web çatısıdır."
gruplama=re.search("(django) (python) (dilinin) (web) (çatısıdır)")
print gruplama.group()

kodlarını çalıştırdığımızda biz

django python dilinin web çatısıdır.

çıktısını verecektir.Bu çıktı oluşturduğumuz grubumuzun tamamıdır.
Grubumuzun bölümlerine erişmek için ise

print gruplama.group(3)

şeklinde yazdığımızda bu kodumuzun çıktısı 3. kelimemiz yani "dilinin" olacaktır.
Burada karıştırılmaması gerek konu indis numarasının 1'den başlaması.Daha önce gördüğümüz
listeler ile karıştırılmamalıdır.Örneğimizi biraz daha geliştirelim;

gruplama=re.search("(django) (python) (dilinin) (web çatısıdır)",gruplanacak_yazi)

şeklinde düzenledikten sonra grubumuzun 4.bölümünü çağıralım

print gruplama.group(4)

Kodumuzu çağırdıktan sonra biz verdiği çıktı "web çatısıdır" oldu.Yani grublamayı biz yönetbiliyoruz.

Groups() Metodu
Bu metodumuz bizim grupladığımız düzenli ifademizi demet haline çevirerek bize sunar.Bir önceki örnekle
devam edersek sadece çıktı alıcağımız yerdeki "group" koduna "s" ekliyeceğiz.

.
.
.
print gruplama.groups()

kodumuz bize şu şekilde bir çıktı verecektir:

('django', 'python', 'dilinin', 'web \xe7at\xfds\xfdd\xfdr')

buradaki 4 ifademizdeki "web" kelimesinden sonraki bölümdeler Türkçe karakter uyumsuzluğu olduğu için
çıkmaktadır.Aslında "\xe7at\xfds\xfdd\xfdr" ifadesinin anlamı "çatısıdır".

bir sonraki dersete görüşmek üzere