Resim

Python re Modülü

Python re Modülü: Düzenli İfadeler (Regular Expressions)

re modülü, metinler içerisinde karmaşık arama, eşleştirme, çıkarma ve değiştirme işlemleri yapmak için kullanılır.

1. Ham Dizeler (Raw Strings) Kullanımı

Düzenli İfadeler, \d (rakam) veya \s (boşluk) gibi ters eğik çizgi (\) ile başlayan özel karakterler kullanır. Python da aynı zamanda \n (yeni satır) gibi ters eğik çizgi kaçış karakterleri kullanır.

Çakışmayı önlemek için, düzenli ifade kalıplarını tanımlarken her zaman Ham Dize (Raw String) kullanmalıyız. Ham Dizeler, dizenin başına r harfi konularak oluşturulur.

KullanımSonuçAçıklama
Normal Dize: "\\d"\dPython, çift ters eğik çizgiyi tek ters eğik çizgi olarak yorumlar.
Ham Dize: r'\d'\dÖnerilen. Python, ters eğik çizgiyi olduğu gibi korur.
Örnek:
# 1. Normal Dize: \n, Python tarafından yeni satır karakteri olarak #yorumlanır.
print('Metin\nYazısı')
# Çıktı: 
# Metin
# Yazısı
# 2. Ham Dize: r'...', \n'nin özel anlamını kaldırır ve \n #karakterlerini gösterir.
print(r'Metin\nYazısı')
# Çıktı: Metin\nYazısı

Açıklama:

  • Normal Dize: İlk print satırında, \n gördüğümüz için imleç bir alt satıra geçer (Yeni Satır).

  • Ham Dize (r''): İkinci print satırında, r olduğu için Python \n karakterini özel bir komut olarak değil, tamamen normal iki karakter (\ ve n) olarak ele alır ve ekrana olduğu gibi basar.

Düzenli İfadelerde r kullanmamızın sebebi de budur: \d (rakam) veya \w (kelime) gibi düzenli ifade karakterlerinin, Python tarafından yanlışlıkla başka bir anlama gelmesini engellemektir.

Kendiniz Deneyebilirsiniz:

2. Temel Metakarakterler ve Örnek Kullanım

MetakarakterAnlamıÖrnek KalıpEşleşme
.Yeni satır hariç herhangi bir karakter (bir kez).r'a.c'abc, aec, a9c
^Dizinin başlangıcı.r'^Baş'Sadece "Başlangıç" metnini bulur.
$Dizinin sonu.r'son$'Sadece "Bu son" metnini bulur.
*Kendinden önceki öğenin 0 veya daha fazla tekrarı.r'ab*c'ac, abc, abbbc
+Kendinden önceki öğenin 1 veya daha fazla tekrarı.r'ab+c'abc, abbbc (ama ac değil)

Örnek : Temel Arama (* ve ^ ile)

import re

metin = "Start. abbbc ve ac. a."

# Kalıp: Metnin başında 'Start.' olmalı
kalip1 = r'^Start\.'
print(re.search(kalip1, metin)) 
# Çıktı: <re.Match object; span=(0, 6), match='Start.'> 
#(Başında eşleşti)

# Kalıp: 'b' harfi sıfır veya daha fazla tekrarlayabilir
kalip2 = r'ab*c' 
print(re.findall(kalip2, metin))
# Çıktı: ['abbbc', 'ac'] 

3. Temel Fonksiyonlar

Kendiniz Deneyebilirsiniz:


3.1. re.match()

Kalıbın, dizenin tamamen başlangıcında eşleşip eşleşmediğini kontrol eder.

import re

metin = "Python programlama dili."

# Kalıp: Dize 'P' ile başlıyor mu?
kalip = r'P\w+' # 'P' ve bir veya daha fazla harf/rakam
eslesme = re.match(kalip, metin)

if eslesme:
    print(f"Match: {eslesme.group()}") # Match: Python
else:
    print("Başlangıçta eşleşme yok.")

3.2. re.search()

Kalıbın, dizenin herhangi bir yerinde ilk eşleşmesini bulur. Bir Match nesnesi döndürür.

import re

metin = "123a456b789"
kalip = r'\d+' # Bir veya daha fazla rakam

eslesme = re.search(kalip, metin)

if eslesme:
    print(f"Search: {eslesme.group()}") # Search: 123

3.3. re.findall()

Dizedeki kalıpla eşleşen tüm parçaları (eşleşmelerin kendisini) liste olarak döndürür.

import re

metin = "123a456b789"
kalip = r'\d+' # Bir veya daha fazla rakam

tum_eslesmeler = re.findall(kalip, metin)

print(f"FindAll: {tum_eslesmeler}") # FindAll: ['123', '456', '789']

3.4. re.sub() (Değiştirme)

Eşleşen tüm kalıpları, belirtilen yeni bir metinle değiştirir.

import re

metin = "Telefon numarası: 555-123. E-posta: test@ornek.com"
kalip = r'\d{3}-\d{3}' # 3 rakam - 3 rakam

yeni_metin = re.sub(kalip, 'XXX-XXX', metin)

print(f"Sub: {yeni_metin}") 
# Sub: Telefon numarası: XXX-XXX. E-posta: test@ornek.com

3.5. re.split() (Bölme)

Belirtilen kalıba uyan eşleşmeler üzerinden dizeyi böler ve bir liste döndürür.

import re

metin = "elma,armut;muz|çilek"
kalip = r'[;,|]' # Virgül, noktalı virgül veya dikey çizgi

liste = re.split(kalip, metin)

print(f"Split: {liste}") 
# Split: ['elma', 'armut', 'muz', 'çilek']

Kendiniz Deneyebilirsiniz:


4. re.compile() (Derleme)

Aynı düzenli ifade kalıbını bir program içinde birden çok kez kullanacaksanız, kalıbı önceden derlemek performansı artırır.

import re

# Kalıbı derle (Compile)
kalip_derlenmis = re.compile(r'\d{4}') 

metin1 = "Tarih 2024"
metin2 = "Yıl 2025"

# Artık derlenmiş nesnenin fonksiyonları kullanılır
eslesme1 = kalip_derlenmis.search(metin1)
eslesme2 = kalip_derlenmis.search(metin2)

print(f"Derlenmiş Kalıp Search 1: {eslesme1.group()}")
print(f"Derlenmiş Kalıp Search 2: {eslesme2.group()}")

Kendiniz Deneyebilirsiniz:

5. Match Nesnesi (Eşleşme Nesnesi)

re.search() veya re.match() gibi fonksiyonlar başarılı olduğunda bir Match Nesnesi döndürür. Bu nesne, eşleşme hakkında detaylı bilgi içerir:

MetotAçıklama
.group()Eşleşen metnin tamamını veya parantezler () ile tanımlanmış bir grubu döndürür.
.span()Eşleşen kısmın metin içindeki başlangıç ve bitiş indekslerini döndürür.
.start()Eşleşmenin başlangıç indeksini döndürür.
.end()Eşleşmenin bitiş indeksini döndürür.

import re

metin = "abc123xyz"

kalip = r'([a-z]+)(\d+)' # Grup 1: Harfler, Grup 2: Rakamlar

eslesme = re.search(kalip, metin)

print(f"Eşleşme Tamamı (group(0)): {eslesme.group(0)}") # abc123

print(f"Sadece Harf Grubu (group(1)): {eslesme.group(1)}") # abc

print(f"Sadece Rakam Grubu (group(2)): {eslesme.group(2)}") # 123

print(f"Başlangıç İndeksi: {eslesme.start()}") # 0

print(f"Bitiş İndeksi: {eslesme.end()}") # 6

Bu liste, re modülünün temel ve ileri seviyedeki tüm kritik bileşenlerini ve özel karakterlerini içerir.

1. Metakarakterler (Tekrar ve Gruplama)

Bu karakterler, kendilerinden önceki öğenin kaç kez geçeceğini veya gruplama yapılıp yapılmayacağını belirler.

  • ? (Sıfır Veya Bir Kez / Optional):

    • Örnek Kalıp: r'colou?r'

    • Açıklama: Kendinden önceki karakterin (u) hiç olmamasını veya bir kez olmasını ister. ("color" ve "colour" eşleşir).

  • {m,n} (Aralık Tekrarı):

    • Örnek Kalıp: r'\d{2,4}'

    • Açıklama: Kendinden önceki öğenin minimum $m$, maksimum $n$ kez tekrar etmesini ister. (Rakam 2 ila 4 kez tekrarlanabilir).

  • | (VEYA Operatörü):

    • Örnek Kalıp: r'(kedi|köpek)'

    • Açıklama: Ya soldaki (kedi) ya da sağdaki (köpek) kalıbın eşleşmesini sağlar.

  • () (Gruplama / Yakalama):

    • Örnek Kalıp: r'(\d{3})-(\d{4})'

    • Açıklama: Eşleşen kısmı ayrı bir grup olarak yakalar. group(1) ve group(2) ile çekilebilir.

  • {n} (Kesin Tekrar):

    • Örnek Kalıp: r'\w{5}'

    • Açıklama: Kendinden önceki öğenin (burada: kelime karakteri) tam olarak 5 kez tekrar etmesini ister.

  • \ (Kaçış Karakteri):

    • Örnek Kalıp: r'\.\s'

    • Açıklama: . (nokta) gibi özel anlam taşıyan karakterin özel anlamını kaldırıp, kendisini literal olarak arar.

2. Özel Diziler (Special Sequences)

Bunlar, sık kullanılan karakter kümeleri için yazılmış kısa yollardır (Hepsi \ ile başlar).

  • \d / \D (Rakam / Rakam Olmayan):

    • Kapsam: [0-9] ve [^0-9]

    • Örnek: r'\d+' (Bir veya daha fazla rakam).

  • \w / \W (Kelime / Kelime Olmayan):

    • Kapsam: [a-zA-Z0-9_] ve [^a-zA-Z0-9_]

    • Örnek: r'\w{6}' (Altı karakterden oluşan bir kelime parçası).

  • \s / \S (Boşluk / Boşluk Olmayan):

    • Kapsam: Boşluk, Sekme, Yeni Satır ve bunların dışındaki karakterler.

    • Örnek: r'\s+' (Bir veya daha fazla boşluk).

  • \b / \B (Kelime Sınırı / Kelime Sınırı Olmayan):

    • Amaç: Bağımsız kelime eşleşmelerini kontrol eder.

    • Örnek: r'\ber\b' (Sadece tek başına 'er' kelimesini arar).

  • \A / \Z (Dizenin Tam Başlangıcı / Tam Sonu):

    • Amaç: ^ ve $'dan farklı olarak, re.MULTILINE bayrağından etkilenmez; dizenin en başını ve en sonunu kontrol eder.

3. Karakter Sınıfları (Character Classes)

Köşeli parantezler ([]) kullanılarak tanımlanır ve tek bir karakterin izin verilen bir grup içinden eşleşmesini sağlar.

  • [abc] (İzin Verilen Karakterler):

    • Örnek: r'[aeiou]'

    • Açıklama: Sadece bu küme içindeki bir karakteri eşleştirir (tek bir sesli harf).

  • [a-z] (Aralık Belirtme):

    • Örnek: r'[A-Za-z0-9]'

    • Açıklama: Tanımlanan aralık içindeki herhangi bir karakteri eşleştirir (bir harf veya rakam).

  • [^...] (Hariç Tutma / Negasyon):

    • Örnek: r'[^.,?!]'

    • Açıklama: Parantez içindeki karakterler dışındaki herhangi bir karakteri eşleştirir.

4. Bayraklar (Flags)

Arama fonksiyonlarına (search, findall, vb.) eklenerek re modülünün davranışını değiştirir.

  • re.IGNORECASE (re.I): Büyük/küçük harf ayrımını yok sayar.

  • re.MULTILINE (re.M): ^ ve $ işaretlerinin her satırın başlangıcına/sonuna eşleşmesini sağlar.

  • re.DOTALL (re.S): . (nokta) karakterinin yeni satır (\n) dahil her şeyi eşleştirmesini sağlar.

  • re.VERBOSE (re.X): Karmaşık kalıpların içine boşluk ve yorum satırları ekleyerek okunabilirliği artırır.

5. İleri Yapılandırma (Ek Konular)

  • İsimli Gruplar:

    • Tanımlama: (?P<isim>kalıp)

    • Amaç: Yakalanan gruplara indeks numarası yerine isim vererek kod okunurluğunu artırır.

    • Kullanım: eslesme.group('isim').

  • Lookahead ((?=...) ve (?!...)):

    • Amaç: Kalıbın eşleşme yaparken, eşleşmenin hemen önündeki metni kontrol etmesini sağlar (Eşleşmenin parçası olmadan).

  • Lookbehind ((?<=...) ve (?<!...)):

    • Amaç: Kalıbın eşleşme yaparken, eşleşmenin hemen arkasındaki metni kontrol etmesini sağlar (Eşleşmenin parçası olmadan).


🔥 Python Kariyerinizi Hemen Başlatın!

Hemen kursumuza kaydolun ve bu güçlü araçları kullanarak profesyonel Python geliştiricisi olma yolunda ilk adımı atın. Kursumuzdaki uygulamalı modüller, sizi sadece bir yazılımcı adayı değil, hazır bir profesyonel haline getirecek. Python Eğitimini Udemy platformunda bulabilirsiniz.

[ Python Eğitimi Sıfırdan İleri Seviye ]

Tıklayın ve Python Eğitimine Hemen Kaydolun!

Yorumlar

Bu blogdaki popüler yayınlar

Python random Modülü

Python print()

Yazılım Nedir?