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.
Ş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"ain\b" |
\B | Başında veya sonunda değilse (r harfi metnin dışında!) | r"\Bain" r"ain\B" |
\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 | "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())