- 29 Tem 2017
- 219
- 0
Düzenli İfadeler (Regular Expression)
Düzenli ifadeler sayesinde, elle yapılması saatlerce süren işlemleri kısa bir süre içerisinde yapabiliriz. Metinleri ve karakter dizileri üzerinde hiç kendimizi yormadan çok basit bir şekilde düzenlemeler yapabiliriz. Bir web sitesinde karmaşık halde bulunan verileri düzenli ifadeler sayesinde rahatlıkla düzenleyebiliriz.Düzenli ifadelerin tamamı bir modül içerisinde toplanmıştır. Modülümüzün adı re modülüdür. Re modülü için ekstra indirmemize gerek yoktur. Python kendi yapısında barındırdığı için sadece import re demeniz yeterli olacaktır.
Giriş
Dilerseniz modülümüze başlayalım. Ben en temel olan iki modülden bahsediceğim. Fazla detaya girmek istemiyorum. Ama siz tam manasıyla öğrenmek isterseniz konunun sonuna bağlantı vericeğim. Orada daha detaylı inceleyebilirsiniz.
1.Match
Arkadaşlar match metodu eşleştirmeye yarar. Yani siz bir nesneye karakter dizisi atadınız. Match ile o karakter dizisi içindeki ilk baştaki veriyi eşleştirebilirsiniz. Hemen örnek verim.
İlk önce re modülümüzü içe aktardık. Daha sonra ornek adlı bir nesneye karakter dizisi atadık. Şunu belirtmek isterim. THT dışındaki bir veriyi eşleltirmeyi denerseniz hata alırsınız. Match metodu sadece ilk baştaki veriyi eşleştirir. Eğer nesneyi döndürürse Match objeckt sonucunu alırız. Hemen bakalım.
Dikkat ettiyseniz eşleştirmemizi bir nesneye atadık. Yani eseles artık bir nesne döngüsü olduk. Görmek için ise print fonksiyonu ile birlikte yazdım sonucumuza bakalım.
Başarılı bir şekilde eşleştirmemizi yaptık. Dilersenize Kulubu nü eşleştirim. Bakalım başarılı bir şekilde döndürecekmi. Eğer dömdürmezse None sonucunu alacağız.
Evet None sonucumuzu aldık. Match metodunun genel mantığı bu. Birkaç örnek daha yapalım.
Bu seferde integerı bir str dizini gibi kaydettim. Ve eşleştirme yaptım. Bakalım sonucumuza.
3.sünün None gelme sebebi sayıların sırasında hata var. Yani tek parametre girerseniz bu sefer hane hane sıralama yapar. Dilerseniz group() metodundanda bahsedim hemen.
Programımızın yapısına bakalım. Ornek adlı bir değişkene str dizisi atadık. Daha sonra eşleştirme adlı değişkene eşleştirmemizi atadık. Ve nesnemizi group metodu ile kullandım. Sonucumuza bakalım.
Gördüğümüz gibi group metodu ise eşleştirdiğimiz veriyi ekrana yazdırır. Peki eğer ilk indexteki değilde farklı bir indextekini alsaydık ne olurdu?
Sonucumuza bakalım.
Gördüğünüz gibi hatamızı aldık. Bunun sebebi eşleştirme bir döngü nesnesi olduğu için, yani eşleştirmemiz hatalı olduğu için hatalı sonuç aldık. Basit bir program yapalım.
Sonucumuza bakalım:
Eğer farklı bir veri ile eşleştirme yaparsak:
Şeklinde sonucumuzu alırız.
2.Search Metodu
Arkadaşlar search modülü ise match metoduna benzer. Fakat çok önemli bir farkı var. O da search metodunun karakter dizininde sadece başa değil geneline bakmasıdır. Nasıl yani? Eğer match metoduna tekrar bakarsak sadece en baştaki veriyi eşleştirdiğini görürüz. Fakat search ise dizinin geneline bakarak eşleştirmek istediğin veriyi sana verir. Önceki programımızda yapalım hemen.
Match metodumuzu kaldırdık ve search metodumuzu getirdik sonucumuza bakalım.
[ ] Köşeli Parantez
İçerisine yazılan karakterleri sırasıyla eşleştirir.
Dikkat ettiyseniz liste içerisinde bu sefer nesne oluşturdum. Fakat düzenli karakterler sadece karakter dizileri üzerinde işlem yaptığı için birkaç oynama ile bunu halledebilirsiniz. Sonucumuz da mantıken 2 nesne vericek.
. Nokta
Herhangi bir karakter yerine kullanılabilir.
*Yıldız
Öncesinde gelen ifaleri birden fazla kez tekrarlanmasını sağlar.
^ Şapka
Metnin başlangıcını temsil eder.
$ Dolar
Metnin sonunu temsil eder.
() Parantez
Gruplandırarak çağırmamızı sağlar.
? Soru İşareti
Öncesindeki tanımın 0 veya bir kez tekrarlanmasını sağlar.
{} Süslü Parantez
Tekrar sayısı için kullanılır. Tabi biz bu tekrar sayısını belirleyebiliriz.
+ Artı
Öncesindeki ifadeleri bir veya daha fazla tekrarlanmasını sağlar.
| Pipe
Veya anlamında kulanılır. İki ifadeyi birleştirir.
Bazı Özel Parametreler
/D
Rakam olmayan harfleri işleştirir.
/d
Rakamları eşleştirir.
/w
Harfleri eşleştirir
/W
Harf olmayan boşluk satırı gibi karakterleri eşleştirmemizi sağlar.
/s
Boşlukları eşleştirir.
/S
Boşluk anlamına gelmeyen karakterleri eşleştirir.
Bazı Bayrak Seçenekleri
Re.I
Büyük-Küçük harf hassasiyetini kaldırır.
Re.M
Çok satırlı eşleştirme yapar.
Re.A
ACII karakterleri eşleştirir.
Re.L
Yerelleştirme ayarlarını göz önüne alır.
Re.S
Nokta özel karakterinin yeni satır karakteri ile eşleşmesini sağlar.
Hepsine tek tek değinmiyeceğim. Bir kaç örnek yaparak düzenli ifadelerimizden bahsedelim.
Sonucumuza bakalım:
Şapka, search metodundaki nesnelerin başına bakar. Dikkat ettiyseniz A-Z yani sadece harfle başlayanları alacağını gördük. Üç tane harfle başlayan değer olduğu için üç verinin baş harflerini verdi.
Burada liste içerisinde 4 tane parametre olduğunu görüyoruz. Dolar işareti burada sonu ak ile biten verileri ekrana vermesini sağlar. Hemen bakalım:
Gördüğümüz gibi 3 tane sonu ak ile biten veriyi karşımıza çıkardı.
Pipe ise veya anlamına geliyordu. 3 tane renk var. Pipe ile üçünü de eşleştirmeye aldık.
Evet üç rengimizi de pipe sayesinde eşleştirdik. Daha detaylı incelemek isterseniz:
https://belgeler.yazbel.com/python-istihza/regex.html bu sayfadan kendinizi geliştirebilirsiniz. Hayırlı günler.