Düzenli İfadeler (Regular Expression) / Ar-Ge Kulübü

Ceen

Üye
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.

Yg0B5A.png


İ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.

lOl70B.png


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.

JQ1Y7W.png


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.

3E0D15.png


Evet None sonucumuzu aldık. Match metodunun genel mantığı bu. Birkaç örnek daha yapalım.

Z94DWg.png


Bu seferde integer’ı bir str dizini gibi kaydettim. Ve eşleştirme yaptım. Bakalım sonucumuza.

rOrQj1.png


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.

6JO2Q3.png


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.

m2BPGP.png


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?

QVqARG.png


Sonucumuza bakalım.

y0QMP7.png


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.

2JAggN.png


Sonucumuza bakalım:

Lbraab.png


Eğer farklı bir veri ile eşleştirme yaparsak:

0EdqmD.png


Ş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.

kOokn7.png


Match metodumuzu kaldırdık ve search metodumuzu getirdik sonucumuza bakalım.

oOvgro.png



[ ] Köşeli Parantez
İçerisine yazılan karakterleri sırasıyla eşleştirir.

gOa58L.png


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.

NZPqp5.png


Sonucumuza bakalım:

Pl9q0N.png


Ş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.

dOp574.png


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:

RnMYO1.png


Gördüğümüz gibi 3 tane sonu ak ile biten veriyi karşımıza çıkardı.

Pl9ql5.png


Pipe ise veya anlamına geliyordu. 3 tane renk var. Pipe ile üçünü de eşleştirmeye aldık.

dOp5OX.png


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.
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.