Python'da Düzenli İfadeler RegEx olarak da bilinir. RegEx, bir arama kalıbı tanımlamak için kullanılan benzersiz bir metin dizesidir. Düzenli İfade, kod, dosyalar, günlükler, elektronik tablolar ve hatta belgeler gibi metinlerden bilgi çıkarmak için faydalıdır. Basit bir ifadeyle RegEx, daha uzun bir metin içinde bir şeyler aramak için kullanabileceğiniz harf, sembol ve sayıların bir kombinasyonudur.
Bu makale Python kullanarak Düzenli İfade kullanımına odaklanacaktır.
Python'da Düzenli İfade kullanırken, ilk ve en önemli şey her şeyin bir karakter olduğunu ve dizeler olarak da kabul edilen belirli bir karakter dizisiyle eşleşecek kalıpları yeniden ürettiğinizi anlamaktır.
Programlama dünyasında, hem acemi hem de deneyimli geliştiriciler genellikle RegEx öğrenmenin ne kadar hayati olduğunu sorarlar. Bugünkü görevimiz, bazı basit ve ilgili örneklerle geliştirme bağlamında RegEx'in önemini bulmaktır.
RegEx'teki bazı temel metakarakterleri ve kullanım amaçlarını tanıtmama izin verin. RegEx sözdizimi hakkında daha fazla bilgi edinmek için Resmi Belgelere göz atabilirsiniz.
Not: Yukarıdaki tablo RegEx'in her yönüne ışık tutmamaktadır. Şimdilik tüm meta karakterleri anlayamıyorsanız canınızı sıkmayın. Zamanla ve eğitimle, bu karakterlerin benzersizliğini anlayacak ve bunları ne zaman kullanacağınızı öğreneceksiniz.
Python, RegEx ile çalışmak için re adlı bir modülle birlikte gelir. RegEx modülünü içe aktarmanın temel sözdizimi şöyledir:
RegEx mekanizması re adlı modülle birlikte gelir ve birçok fonksiyon sağlar. Bu derste, en pratik ve yaygın olarak kullanılan üç fonksiyonu ele alacağım.
re.match() Fonksiyonu
Python'daki re modülünün re.match() işlevi, düzenli ifade desenini arar ve ilk oluşumu döndürür. Python RegEx Match işlevi, yalnızca dizenin başında bir eşleşme olup olmadığını kontrol eder. Bu nedenle, ilk satırda bir eşleşme bulunursa, hemen eşleşen nesneyi döndürür. Ancak, başka bir satırda bir eşleşme görülürse, Python RegEx Match işlevi null döndürür. Hemen hızlı bir örnek görelim:
Çıktı:
Yukarıdaki örnekte, re.match()fonksiyonu, dizenin başlangıcındaki sıfır veya daha fazla karakter (C) kalıpla eşleşirse karşılık gelen bir eşleşme nesnesi döndürür. Aksi takdirde, dize verilen desenle eşleşmiyorsa None döndürür. Gördüğünüz gibi, ilk oluşumun başında deseni bulamadığı için None çıktısı alıyoruz.
re.search() Fonksiyonu
re.search() fonksiyonu düzenli ifade kalıbını arar ve bir dizedeki ilk oluşumu döndürür. re.match() fonksiyonundan farklı olarak, girdi dizesinin tüm satırlarını kontrol eder. Python re.search() işlevi, kalıp bulunduğunda bir eşleşme nesnesi döndürür ve kalıp dizede bulunmazsa “null” olur.
İşte daha iyi anlamanız için basit bir örnek.
Çıktı:
Yukarıdaki python programında iki kalıp belirledim ve bunları my_string içinde arattım. İlk durum için fonksiyon eşleşen bir durum elde etti. Bu nedenle, ikinci durum için pozitif ve negatif döndürdü.
re.findall() Fonksiyonu
Python'da re.findall() yöntemi, verilen kalıp üzerine giriş metnindeki tüm eşleşen durumları içeren bir karakter dizisi listesi döndürür. re.search() yöntemi, belirtilen kalıbı kullanarak sağlanan metni hızlı bir şekilde arar ve yalnızca ilk oluşumu döndürür. Buna karşılık, re.findall() işlevi dosyanın tüm satırları üzerinde yineleme yapar ve tek bir adımda örüntünün örtüşmeyen tüm eşleşmelerini döndürür. Eğer desen metinde bulunamazsa, re.findall() boş bir liste döndürür.
Şimdi **re.findall() **fonksiyonunun davranışını anlamak için basit bir python programı yazalım.
Çıktı:
Yukarıdaki örneğe yakından bakarsanız, tek bir desene karşı bildirilen iki farklı dizgi görürsünüz. İlk dize için, re.findall() işlevi bir eşleşme elde etti ve desen talebine göre ['10', '20', '30'] değerini döndürdü. Öte yandan, ikinci dizede kalıp mevcut değildi. Bu nedenle, fonksiyon boş bir liste [] döndürdü.
Bu makale Python kullanarak Düzenli İfade kullanımına odaklanacaktır.
Python'da Düzenli İfade kullanırken, ilk ve en önemli şey her şeyin bir karakter olduğunu ve dizeler olarak da kabul edilen belirli bir karakter dizisiyle eşleşecek kalıpları yeniden ürettiğinizi anlamaktır.
Programlama dünyasında, hem acemi hem de deneyimli geliştiriciler genellikle RegEx öğrenmenin ne kadar hayati olduğunu sorarlar. Bugünkü görevimiz, bazı basit ve ilgili örneklerle geliştirme bağlamında RegEx'in önemini bulmaktır.
RegEx'teki bazı temel metakarakterleri ve kullanım amaçlarını tanıtmama izin verin. RegEx sözdizimi hakkında daha fazla bilgi edinmek için Resmi Belgelere göz atabilirsiniz.
Not: Yukarıdaki tablo RegEx'in her yönüne ışık tutmamaktadır. Şimdilik tüm meta karakterleri anlayamıyorsanız canınızı sıkmayın. Zamanla ve eğitimle, bu karakterlerin benzersizliğini anlayacak ve bunları ne zaman kullanacağınızı öğreneceksiniz.
Python, RegEx ile çalışmak için re adlı bir modülle birlikte gelir. RegEx modülünü içe aktarmanın temel sözdizimi şöyledir:
Python:
import re
RegEx mekanizması re adlı modülle birlikte gelir ve birçok fonksiyon sağlar. Bu derste, en pratik ve yaygın olarak kullanılan üç fonksiyonu ele alacağım.
re.match() Fonksiyonu
Python'daki re modülünün re.match() işlevi, düzenli ifade desenini arar ve ilk oluşumu döndürür. Python RegEx Match işlevi, yalnızca dizenin başında bir eşleşme olup olmadığını kontrol eder. Bu nedenle, ilk satırda bir eşleşme bulunursa, hemen eşleşen nesneyi döndürür. Ancak, başka bir satırda bir eşleşme görülürse, Python RegEx Match işlevi null döndürür. Hemen hızlı bir örnek görelim:
Python:
import re
pattern = "C"
sequence1 = "IceCream"
sequence2 = "Catch"
print("Sequence 1: ", re.match(pattern, sequence1))
print("Sequence 2: ", re.match(pattern,sequence2).group())
Çıktı:
Sequence 1: None
Sequence 2: C
Yukarıdaki örnekte, re.match()fonksiyonu, dizenin başlangıcındaki sıfır veya daha fazla karakter (C) kalıpla eşleşirse karşılık gelen bir eşleşme nesnesi döndürür. Aksi takdirde, dize verilen desenle eşleşmiyorsa None döndürür. Gördüğünüz gibi, ilk oluşumun başında deseni bulamadığı için None çıktısı alıyoruz.
re.search() Fonksiyonu
re.search() fonksiyonu düzenli ifade kalıbını arar ve bir dizedeki ilk oluşumu döndürür. re.match() fonksiyonundan farklı olarak, girdi dizesinin tüm satırlarını kontrol eder. Python re.search() işlevi, kalıp bulunduğunda bir eşleşme nesnesi döndürür ve kalıp dizede bulunmazsa “null” olur.
İşte daha iyi anlamanız için basit bir örnek.
Python:
import re
patterns = ["Software testing", "Dan"]
my_string = "Software testing is a tough job"
for pattern in patterns:
print("Looking for '%s' in '%s' " % (pattern, my_string), end='')
if re.search(pattern,my_string):
print("Here is a match case")
else:
Python:
print("Not a match")
Çıktı:
Looking for 'Software testing' in 'Software testing is a tough job' Here is a match case
Looking for 'Dan' in 'Software testing is a tough job' Not a match
Yukarıdaki python programında iki kalıp belirledim ve bunları my_string içinde arattım. İlk durum için fonksiyon eşleşen bir durum elde etti. Bu nedenle, ikinci durum için pozitif ve negatif döndürdü.
re.findall() Fonksiyonu
Python'da re.findall() yöntemi, verilen kalıp üzerine giriş metnindeki tüm eşleşen durumları içeren bir karakter dizisi listesi döndürür. re.search() yöntemi, belirtilen kalıbı kullanarak sağlanan metni hızlı bir şekilde arar ve yalnızca ilk oluşumu döndürür. Buna karşılık, re.findall() işlevi dosyanın tüm satırları üzerinde yineleme yapar ve tek bir adımda örüntünün örtüşmeyen tüm eşleşmelerini döndürür. Eğer desen metinde bulunamazsa, re.findall() boş bir liste döndürür.
Şimdi **re.findall() **fonksiyonunun davranışını anlamak için basit bir python programı yazalım.
Python:
import re
my_string1 = "Hello 10 Dan 20. Howdy? 30"
my_string2 = "Hello Dan Howdy?"
pattern = '\d+'
result1 = re.findall(pattern, my_string1)
result2 = re.findall(pattern, my_string2)
print(result1)
print(result2)
Çıktı:
['10', '20', '30']
[]
Yukarıdaki örneğe yakından bakarsanız, tek bir desene karşı bildirilen iki farklı dizgi görürsünüz. İlk dize için, re.findall() işlevi bir eşleşme elde etti ve desen talebine göre ['10', '20', '30'] değerini döndürdü. Öte yandan, ikinci dizede kalıp mevcut değildi. Bu nedenle, fonksiyon boş bir liste [] döndürdü.