04 Haziran 2025 Çarşamba
Script Düzenli ifadeler (regex), metin işleme, veri analizi ve veri doğrulama gibi pek çok farklı alanda çok güçlü araçlardır. Python’da regex işlemleri yapmak için re
modülü kullanılır. Bu modül sayesinde metinlerdeki belirli desenleri arayabilir, değiştirebilir veya manipüle edebilirsiniz. İleri seviye regex kullanımı, scriptlerinizi daha güçlü hale getirerek karmaşık metin analizlerini daha verimli yapmanıza olanak tanır.
Bu yazıda, regex kullanarak bir scripti nasıl daha güçlü ve verimli hale getirebileceğinizi göstereceğim.
İlk olarak, Python’da re
modülünün temel fonksiyonlarına göz atalım:
re.match()
: Bir dizenin başlangıcında belirli bir deseni arar.re.search()
: Bir dizede herhangi bir yerde belirli bir deseni arar.re.findall()
: Desene uyan tüm parçaları döndürür.re.sub()
: Belirli bir deseni başka bir metinle değiştirir.Regex, parantez kullanarak bir desende gruplar oluşturmanıza imkan verir. Bu gruplar, belirli metin parçalarını yakalamak ve bunları daha sonra işlemek için kullanılır.
Örnek: Bir metindeki e-posta adreslerini bulalım.
import re
text = "Beni e-posta ile iletişime geçebilirsiniz: example@test.com veya test@example.org"
# E-posta adreslerini yakalamak için regex deseni
email_pattern = r'([a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,})'
# re.findall() ile tüm eşleşmeleri bul
emails = re.findall(email_pattern, text)
print("Bulunan E-posta Adresleri:", emails)
Bu örnekte, regex deseni, @
sembolü ve nokta (.
) gibi karakterleri içeriyor ve ardından metindeki tüm e-posta adreslerini buluyor.
Regex, önceden tanımlı karakter sınıflarını kullanarak belirli türdeki karakterleri aramanızı sağlar. Örneğin, sayıları, harfleri veya özel karakterleri tanıyabilirsiniz.
Örnek: Bir metindeki tüm sayıları yakalayalım.
import re
text = "Fiyatlar: 100, 200, 300, 1500, 9999"
# Sayıları yakalamak için regex deseni
numbers = re.findall(r'\d+', text)
print("Bulunan Sayılar:", numbers)
Bu örnekte, \d+
deseni, metindeki tüm ardışık rakamları (sayıları) yakalar.
Karakter aralıkları, belirli bir grup karakter arasındaki tüm karakterleri seçmenize olanak tanır. Örneğin, belirli bir harf aralığı ya da belirli bir sayfa kodu aramak için kullanabilirsiniz.
Örnek: Büyük harfleri ve küçük harfleri yakalayalım.
import re
text = "Python, Java ve C++ gibi diller kullanarak script yazabilirim."
# Büyük harfleri ve küçük harfleri yakalamak için regex deseni
matches = re.findall(r'[a-zA-Z]+', text)
print("Bulunan Kelimeler:", matches)
Bu örnekte, [a-zA-Z]+
deseni, metindeki tüm harflerden oluşan kelimeleri yakalar.
Regex desenlerinde, kelimelerin başına (^
) veya sonuna ($
) bakabilirsiniz. Bu, metnin belirli bir kısmının başlangıcını veya sonunu kontrol etmek için kullanışlıdır.
Örnek: Metnin başında “Python” kelimesi olup olmadığını kontrol edelim.
import re
text = "Python ile script yazmak çok eğlenceli."
# Metnin başında "Python" kelimesini kontrol et
if re.match(r'^Python', text):
print("Metin Python ile başlıyor.")
else:
print("Metin Python ile başlamıyor.")
Burada, ^Python
deseni, metnin başında “Python” kelimesinin olup olmadığını kontrol eder.
Lookahead ve lookbehind, bir deseni yalnızca bir koşul sağlandığında eşleştirecek şekilde kullanmanıza olanak tanır. Bu tür işlemler ileri seviye regex tekniklerindendir.
(?=...)
): Ardından gelen deseni kontrol eder.(?<=...)
): Önceki deseni kontrol eder.Örnek: “@” sembolünden önceki kelimeleri yakalayalım.
import re
text = "Bu e-posta adresi: example@test.com"
# Lookahead kullanarak @ sembolünden önceki kelimeyi yakalayalım
result = re.findall(r'\w+(?=@)', text)
print("E-posta Öncesi Kelime:", result)
Bu örnekte, \w+(?=@)
deseni, @
sembolünden önceki kelimeyi (e-posta kullanıcı adını) bulur.
re.sub()
)re.sub()
fonksiyonu, bir metindeki belirli bir deseni başka bir metinle değiştirmek için kullanılır.
Örnek: E-posta adreslerini anonimleştirelim.
import re
text = "Beni e-posta ile iletişime geçebilirsiniz: example@test.com veya test@example.org"
# E-posta adreslerini anonimleştir
anonymized_text = re.sub(r'([a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,})', '***@***.com', text)
print("Anonimleştirilmiş Metin:", anonymized_text)
Bu örnekte, metindeki tüm e-posta adreslerini ***@***.com
ile değiştirdik.
Regex kullanırken performans önemli olabilir. Büyük veri kümesi veya karmaşık desenler ile çalışırken, regex’in hızını artırmak için aşağıdaki yöntemleri kullanabilirsiniz:
.
, +
, *
, ?
) kullanıyorsanız, bu karakterlerin kaçırıldığından emin olun.Regex, Python’da veri doğrulama, metin analizi ve metin manipülasyonu için son derece güçlü bir araçtır. İleri seviye regex özelliklerini kullanarak, scriptlerinizi daha esnek ve güçlü hale getirebilir, karmaşık metin verilerini kolayca işleyebilirsiniz. Yukarıdaki örnekler, regex kullanarak Python’da metin işlemenin ne kadar güçlü ve verimli olabileceğini gösteriyor.