Python’da Regüler İfadelere Hakim Olma
Regüler ifadeler (regex veya regexp), dizeler içindeki desen eşleştirme için güçlü araçlardır. Python’ın re
modülü, bunlarla çalışmak için kapsamlı bir arayüz sağlayarak gelişmiş metin manipülasyonu ve veri çıkarma işlemlerini mümkün kılar. Bu öğretici, temel işlevleri ve kavramları size adım adım anlatarak Python projelerinizde regüler ifadelerin gücünden etkili bir şekilde yararlanmanızı sağlayacaktır.
İçerik Tablosu
re.match()
: Başlangıçta Eşleştirmere.search()
: İlk Eşleşmeyi Bulmare.compile()
: Performansı Optimize Etme- Bayraklar: Eşleştirme Davranışını Değiştirme
- Karakter Kümeleri: İzin Verilen Karakterleri Tanımlama
re.sub()
ile Arama ve Değiştirmere.findall()
: Tüm Eşleşmeleri Çıkarmare.finditer()
: Eşleşmeler Üzerinden İterasyonre.split()
: Desenlere Göre Dizeleri Bölme- Temel Desenler: Bağlaçlar, Karakter Sınıfları
- Tekrarlama: Nicelleyiciler ve Açgözlü vs. Açgözlü Olmayan Eşleştirme
- Özel Diziler: Rakamlar, Boşluklar, Kelime Karakterleri
re.escape()
: Özel Karakterleri İşleme- Yakalama Grupları ve
group()
Metodu
1. re.match()
: Başlangıçta Eşleştirme
re.match()
fonksiyonu, deseni yalnızca dizenin en başında eşleştirmeyi dener. Başarılı olursa bir eşleşme nesnesi, aksi takdirde None
döndürür.
import re
text = "Merhaba Dünya"
pattern = "Merhaba"
match = re.match(pattern, text)
if match:
print("Eşleşme bulundu:", match.group(0))
else:
print("Eşleşme bulunamadı")
2. re.search()
: İlk Eşleşmeyi Bulma
re.search()
, desenin ilk oluşumunu bulmak için tüm diziyi tarar. re.match()
‘ten farklı olarak, eşleşmenin başta olmasını gerektirmez.
import re
text = "Merhaba Dünya"
pattern = "Dünya"
match = re.search(pattern, text)
if match:
print("Eşleşme bulundu:", match.group(0))
else:
print("Eşleşme bulunamadı")
3. re.compile()
: Performansı Optimize Etme
Özellikle aynı desenin tekrarlanan kullanımı durumunda daha iyi performans için, re.compile()
kullanarak derleyin. Bu, yeniden kullanılabilir bir desen nesnesi oluşturur.
import re
compiled_pattern = re.compile(r"d+") # Deseni derleyin
text1 = "123 elma var"
text2 = "Ve 456 portakal"
match1 = compiled_pattern.search(text1)
match2 = compiled_pattern.search(text2)
print(match1.group(0)) # Çıktı: 123
print(match2.group(0)) # Çıktı: 456
4. Bayraklar: Eşleştirme Davranışını Değiştirme
Bayraklar, eşleştirme işlemini değiştirir. re.IGNORECASE
büyük/küçük harfe duyarsız eşleştirme yapar ve re.MULTILINE
, ^
ve $
bağlaçları için her satırı ayrı bir dizi olarak ele alır.
import re
text = "Merhaba dünya"
pattern = re.compile("merhaba", re.IGNORECASE)
match = pattern.search(text)
print(match.group(0)) # Çıktı: Merhaba
5. Karakter Kümeleri: İzin Verilen Karakterleri Tanımlama
Karakter kümeleri ([]
), izin verilen karakterleri belirtir. Örneğin, [a-z]
küçük harfleri eşleştirir.
import re
text = "abc123XYZ"
pattern = re.compile("[a-z]+")
match = pattern.search(text)
print(match.group(0)) # Çıktı: abc
6. re.sub()
ile Arama ve Değiştirme
re.sub()
, bir desenin oluşumlarını bir değiştirme dizesiyle değiştirir.
import re
text = "Merhaba Dünya"
new_text = re.sub("Dünya", "Python", text)
print(new_text) # Çıktı: Merhaba Python
7. re.findall()
: Tüm Eşleşmeleri Çıkarma
re.findall()
, tüm örtüşmeyen eşleşmelerin bir listesini döndürür.
import re
text = "123 abc 456 def"
numbers = re.findall(r"d+", text)
print(numbers) # Çıktı: ['123', '456']
8. re.finditer()
: Eşleşmeler Üzerinden İterasyon
re.finditer()
, eşleşme nesneleri üreten bir yineleyici döndürür. Büyük dizelerde çok sayıda eşleşme için daha bellek verimlidir.
import re
text = "123 abc 456 def"
for match in re.finditer(r"d+", text):
print(match.group(0)) # Çıktı: 123, 456 (ayrı satırlarda)
9. re.split()
: Desenlere Göre Dizeleri Bölme
re.split()
, bir desene göre bir diziyi böler.
import re
text = "elma,muz,kiraz"
fruits = re.split(r",", text)
print(fruits) # Çıktı: ['elma', 'muz', 'kiraz']
10. Temel Desenler: Bağlaçlar, Karakter Sınıfları
.
: Yeni satır hariç herhangi bir karakterle eşleşir.^
: Dizinin başlangıcıyla eşleşir.$
: Dizinin sonuyla eşleşir.[]
: Bir karakter kümesiyle eşleşir (örneğin,[abc]
,[a-z]
).[^...]
: Kümenin içinde *olmayan* herhangi bir karakterle eşleşir (olumsuzlanmış karakter kümesi).
11. Tekrarlama: Nicelleyiciler ve Açgözlü vs. Açgözlü Olmayan Eşleştirme
*
: Sıfır veya daha fazla oluşum.+
: Bir veya daha fazla oluşum.?
: Sıfır veya bir oluşum.{m}
: Tam olarakm
oluşum.{m,n}
:m
‘denn
‘ye kadar oluşum.*?
,+?
,??
,{m,n}?
: Açgözlü olmayan sürümler (en kısa olası diziyle eşleşir).
12. Özel Diziler: Rakamlar, Boşluklar, Kelime Karakterleri
d
: Herhangi bir rakamla eşleşir (0-9).D
: Herhangi bir rakam olmayan karakterle eşleşir.s
: Herhangi bir boşluk karakteriyle eşleşir (boşluk, sekme, yeni satır).S
: Herhangi bir boşluk olmayan karakterle eşleşir.w
: Herhangi bir alfasayısal karakterle eşleşir (harfler, rakamlar, alt çizgi).W
: Herhangi bir alfasayısal olmayan karakterle eşleşir.
13. re.escape()
: Özel Karakterleri İşleme
re.escape()
, bir dizideki özel karakterleri kaçırır ve böylece istenmeyen regex yorumlamaları olmadan bunu harfi harfine bir desen olarak kullanmanıza olanak tanır.
14. Yakalama Grupları ve group()
Metodu
Parantezler ()
yakalama grupları oluşturur. group()
metodu, yakalanan alt dizelere erişir.
import re
text = "Telefon numaram 123-456-7890"
match = re.search(r"(d{3})-(d{3})-(d{4})", text)
if match:
area_code = match.group(1)
prefix = match.group(2)
line_number = match.group(3)
print(f"Alan Kodu: {area_code}, Ön Ek: {prefix}, Hat Numarası: {line_number}")
Bu öğretici, Python’ın re
modülünde sağlam bir temel sağlar. Gelişmiş tekniklerin daha fazla araştırılması, dizi işleme yeteneklerinizi önemli ölçüde artıracaktır. Tam bir referans için resmi Python belgelerine başvurmayı unutmayın.