Python Python RegEx (Düzenli İfadeler)

Düzenli ifadeler (RegEx ya da Regular Expression), bir karakter serisi içinde belli bir düzene uyan eşleşmeleri içerir. Bir metinde geçen karakterleri RegEx desenleri (pattern) kullanarak arayabiliriz.

re Modülü

Düzenli ifadelerle çalışmak için re modülünü uygulamamıza dahil ederiz.
 

PYTHON Kodu

import re

Şimdi ilk aramamızı gerçekleştirelim. Aşağıdaki örnekte derleyiciye Ankara ile başlayan ve yağıyor ile biten bir kelime varsa bulmasını söylüyoruz.
 

PYTHON Kodu

import re

txt = "Ankara'da yağmur yağıyor"
x = re.search("^Ankara.*yağıyor$", txt)

if x:
   print("Buldum!")
else:
   print("Yok öyle bir şey!")

RegEx Fonksiyonları

re modülü bir veride geçen karakterleri bulmamıza olanak sağlayan bazı fonksiyonlara sahiptir.
 

Fonksiyon Açıklama
findall Tüm eşleşmeleri göster (liste halinde)  
search Eşleşme olup olmadığını göster  
split Eşleşme noktalarından böl ve liste oluştur  
sub Eşleşmeleri verilen ifade ile değiştir  

Özel Karakterler

Desen yazarken kullanılan ve özel anlamlar içeren bazı karakterler vardır.
 

Karakter Açıklama Örnek
[] Belirli karakterler kullan "[a-m]"
Özel karakter belirt ya da sonraki karakteri dikkate alma "d"
. Satırbaşı hariç herhangi bir karakter "he..o"
^ ... ile başlayan "^hello"
$ ... ile biten "world$"
* Sıfır ve üzeri sayıda eşleşme "aix*"
+ Bir ve üzeri sayıda eşleşme "aix+"
{} Kaç haneli bir sayı olduğu "al{2}"
| İkisinden biri "falls|stays"
() Eşleme ya da gruplama  

Özel Seriler

Belli bir anlamı olan ve karakteri ile kullanılan desen tanımlamaları içerir.
 

Karakter Açıklama Örnek
A Aranan kelime yazının başındaysa "AThe"
b Başında veya sonundaysa (r harfi metnin dışında!) r"bain"
r"ainb"
B Başında veya sonunda değilse (r harfi metnin dışında!) r"Bain"
r"ainB"
d Eğer sayı/sayılar içeriyorsa "d"
D Eğer sayı içermiyorsa "D"
s Eğer boşluk içeriyorsa "s"
S Eğer boşluk içermiyorsa "S"
w Eğer a-z, A-Z, sayıla (0-9) ve alt çizgi içeriyorsa "w"
W w nin tam tersi "W"
Z Aranan kelime yazının sonundaysa "SpainZ"

findall() Fonksiyonu

Belirtilen desende tüm eşleşmeleri içeren bir liste verir.
 

PYTHON Kodu

import re

txt = "Bir Gece, Bir Gündüz."
x = re.findall("Bir", txt)
print(x)

Yukarıdaki örnek çalıştırıldığında "Bir" ifadelerini sıraya göre liste olarak döndürdüğü görülür. Eğer herhangi bir sonuç bulamazsa boş bir liste döndürür.
 

search() Fonksiyonu

Belirtilen ifadenin veri içerisinde olup olmadığını denetler. Birden fazla eşleşme varsa sadece ilk olanı gösterir.
 

PYTHON Kodu

import re

txt = "Bu metin boşluklar içeriyor."
x = re.search("s", txt)

print("İlk boşluğun bulunduğu yer kaçıncı karakter?:", x.start())

Eğer hiçbir eşleşme bulamazsa None yani "hiç" verisi döner.
 

PYTHON Kodu

import re

txt = "Türkiye'de yağmur"
x = re.search("Kanada", txt)
print(x)

split() Fonksiyonu

Veriyi eşleşmelerin olduğu noktalardan böler ve liste haline getirir. Örneğin aşağıdaki kod çalıştırılırsa cümle boşluk (s) karakterlerinden bölünür (yani kelimelere ayrılır):
 

PYTHON Kodu

import re

txt = "Beni anlamadın ya, ben ona yanıyorum."
x = re.split("s", txt)
print(x)

Bölünme sayısı split() fonksiyonunun 3. parametresinde (maxsplit) belirtilebilir. Aşağıdaki örnekte veri en çok 2 boşluk kadar (3 parça) bölünecektir:
 

PYTHON Kodu

import re

txt = "Beni anlamadın ya, ben ona yanıyorum."
x = re.split("s", txt, 2)
print(x)

sub() Fonksiyonu

Eşleşmeleri verilen ifadelerle değiştirir. Aşağıdaki örnekte kavun kelimesini bulacak, ardından karpuz olarak değiştirecektir:
 

PYTHON Kodu

import re

txt = "Bugün kavun yedim."
x = re.sub("kavun", "karpuz", txt)
print(x)

Kaç eşleşmede değişiklik yapılacağı, fonksiyonun 4. parametresinde (count) belirtilebilir:
 

PYTHON Kodu

import re

txt = "Yaz Yaz Yaz Bir Kenara Yaz"
x = re.sub("Yaz", "Çiz", txt, 3)
print(x)

Match Nesnesi

Düzenli ifadelerle çalışırken dönen veri Match türünde bir nesnedir. Bu nesne bulunan eşleşmelerle ilgili bazı değerler içerir.
 

PYTHON Kodu

import re

txt = "Beni bul, beni onlara verme."
x = re.search("bul", txt)
print(x)

Dönen değer bir Match nesnesidir.
 

Görünüm

Bu nesnenin dönen değeri ile ilgili bazı işlemler yapılabilir. Bunun için nesnenin yöntemleri kullanılır. Bunlar;
 

  • .span() tuple olarak başlangıç ve bitiş pozisyonlarını verir.
  • .string dönen string değeri yazdırır
  • .group() eşleşmelerinin yerlerini içerir

span() Fonksiyonu

Eşleşmenin başladığı ve sona erdiği karakterlerin sırasını verir (0=1. karakter):
 

PYTHON Kodu

import re

txt = "Bu sabah yağmur var İstanbul'da..."
x = re.search(r"byw+", txt)
print(x.span())

string Özelliği

Eşleşme bulunan metni gösterir.
 

PYTHON Kodu

import re

txt = "Bu sabah yağmur var İstanbul'da..."
x = re.search(r"byw+", txt)
print(x.string)

group() Fonksiyonu

Eşleşme bulunan parçayı gösterir.
 

PYTHON Kodu

import re

txt = "Bu sabah yağmur var İstanbul'da..."
x = re.search(r"byw+", txt)
print(x.group())

Kaynak

Yorumunuzu Ekleyin


Yükleniyor...
    Yükleniyor...