Python Tutorials

Python’da Düzenli İfadelerde Ustalaşma

Spread the love

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

  1. re.match(): Başlangıçta Eşleştirme
  2. re.search(): İlk Eşleşmeyi Bulma
  3. re.compile(): Performansı Optimize Etme
  4. Bayraklar: Eşleştirme Davranışını Değiştirme
  5. Karakter Kümeleri: İzin Verilen Karakterleri Tanımlama
  6. re.sub() ile Arama ve Değiştirme
  7. re.findall(): Tüm Eşleşmeleri Çıkarma
  8. re.finditer(): Eşleşmeler Üzerinden İterasyon
  9. re.split(): Desenlere Göre Dizeleri Bölme
  10. Temel Desenler: Bağlaçlar, Karakter Sınıfları
  11. Tekrarlama: Nicelleyiciler ve Açgözlü vs. Açgözlü Olmayan Eşleştirme
  12. Özel Diziler: Rakamlar, Boşluklar, Kelime Karakterleri
  13. re.escape(): Özel Karakterleri İşleme
  14. 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ı")

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 olarak m oluşum.
  • {m,n}: m‘den n‘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.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir