Python RegEx (Düzenli İfadeler) - Python Dersleri

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.

FonksiyonAçıklama
findallTüm eşleşmeleri göster (liste halinde)
searchEşleşme olup olmadığını göster
splitEşleşme noktalarından böl ve liste oluştur
subEşleşmeleri verilen ifade ile değiştir

Özel Karakterler

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

KarakterAçı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.

KarakterAçıklamaÖrnek
\AAranan kelime yazının başındaysa"\AThe"
\bBaşında veya sonundaysa (r harfi metnin dışında!)r"\bain"
r"ain\b"
\BBaşında veya sonunda değilse (r harfi metnin dışında!)r"\Bain"
r"ain\B"
\dEğer sayı/sayılar içeriyorsa"\d"
\DEğer sayı içermiyorsa"\D"
\sEğer boşluk içeriyorsa"\s"
\SEğer boşluk içermiyorsa"\S"
\wEğer a-z, A-Z, sayıla (0-9) ve alt çizgi içeriyorsa"\w"
\W\w nin tam tersi"\W"
\ZAranan kelime yazının sonundaysa"Spain\Z"

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

<re.Match object; span=(5, 8), match='bul'>
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"\by\w+", 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"\by\w+", 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"\by\w+", txt)
print(x.group())