Normal İfade veya Normal İfade, bir arama modeli oluşturan bir karakter dizisidir.
RegEx, bir dizenin belirtilen arama modelini içerip içermediğini kontrol etmek için kullanılabilir.
Bütün dillerin parçası olan bu terim , bir metni düzenlemek ya da metinden alt parçaları elde etmemize imkan sağlar.
Bunun için herhangi bir kurulum ihtiyacı gerektirmez çünkü “re” kütüphanesi standart olarak gelen kütüphaneler arasındadır yani projenin başında “import re” yazılması yeterli olacaktır.
1 2 3 |
import re |
RegEx Fonksiyonları
findall() Fonksiyonu
Findall () işlevi tüm eşleşmeleri içeren bir liste döndürür. Konu devamında FindAll fonksiyonu ile ilgili birçok örneğe ulaşabilirsiniz.
Örnek:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
import re txt = "python dersleri" #Dizede a, r veya n karakterleri olup olmadığını kontrol edin: x = re.findall("[arn]", txt) print(x) if x: print("Eşleşme Var!") else: print("Eşleşme Yok!") |
Çıktı:
1 2 3 4 |
['n', 'r', 'r'] Eşleşme Var! |
Match() Fonksiyonu
Bu method verilen bir metin üzerinde belirtilmiş olan ifadeyi aramak , metin içeriğiyle eşleşip eşlemediğini bulmak için kullanılır fakat match methodu karakter dizisinin yalnız en başına bakar. Örnekleri inceleyelim.
Alttaki örnekte Dersleri kelimesi aranmaktadır. txt değişkeni içinde olduğu halde match() fonksiyonu en başa baktığı için sonuç None olarak dönecektir.
1 2 3 4 5 6 7 8 |
import re txt = "Python Dersleri" x = re.match("Dersleri", txt) print(x) |
Aranan değer Python ifadesi olsaydı aşağıdaki gibi bir çıktı alacaktık.
1 2 3 |
<re.Match object; span=(0, 6), match='Python'> |
Search() Fonksiyonu
Bu method match() methoduna oldukça benzemesine rağmen fark olarak match() methodu sadece en başında eşleştirme ararken search methodu metnin tamamına bakar yani match() methodunda elde edilemeyen sonuçlar match methodunda elde edilebilir.
Örnek 1:
1 2 3 4 5 6 7 8 9 |
import re txt = "Python öğrenmek çok kolay." x = re.search("\s", txt) y = re.search("e", txt) print("İlk boşluk karakterinin pozisyonu:", x.start()) print("İlk e karakterinin pozisyonu:", y.start()) |
Çıktı:
1 2 3 4 |
İlk boşluk karakterinin pozisyonu: 6 İlk e karakterinin pozisyonu: 10 |
Eşleşme bulunmazsa None değeri döndürülür.
Örnek:
1 2 3 4 5 6 7 |
import re txt = "Korkma sönmez bu şafaklarda yüzen al sancak." x = re.search("buz", txt) print(x) |
Split() Fonksiyonu
Split () fonksiyonu, dizenin her eşleşmede bölündüğü bir liste döndürür:
Örnek:
1 2 3 4 5 6 7 8 9 |
import re #Dizeyi her boşluk karakterinde bölün. txt = "Python öğrenmek çok kolay." x = re.split("\s", txt) print(x) |
Çıktı:
1 2 3 |
['Python', 'öğrenmek', 'çok', 'kolay.'] |
Maxsplit parametresini belirterek oluşum sayısını kontrol edebilirsiniz:
Örnek:
1 2 3 4 5 6 7 8 9 |
import re #Dizeyi ilk boşluk karakterinden ayırın. txt = "Python öğrenmek çok kolay" x = re.split("\s", txt, 1) print(x) |
Çıktı:
1 2 3 |
['Python', 'öğrenmek çok kolay'] |
sub() Fonksiyonu
Sub () fonksiyonu , eşleşmeleri seçtiğiniz metinle değiştirir:
Örnek:
1 2 3 4 5 6 7 8 9 |
import re #Tüm boşluk karakterlerini 1 karakteri ile değiştirin: txt = "Python öğrenmek çok kolay" x = re.sub("\s", "1", txt) print(x) |
Çıktı:
1 2 3 |
Python1öğrenmek1çok1kolay |
count parametresini belirterek değiştirme sayısını kontrol edebilirsiniz:
Örnek:
1 2 3 4 5 6 7 8 9 |
import re # boşluk karakterinin ilk iki geçtiği yeri 1 rakamıyla değiştirin txt = "Python öğrenmek çok kolay" x = re.sub("\s", "1", txt, 2) print(x) |
Çıktı:
1 2 3 |
Python1öğrenmek1çok kolay |
Metacharacters
Metakarakterler, özel bir anlamı olan karakterlerdir.
Bu konuda örnekler yaparak konuyu pekiştirelim.
Karakter | Açıklama |
[ ] | Karakter dizisi |
\ | Özel bir sırayı işaret eder (özel karakterlerden kaçmak için de kullanılabilir) |
. | Herhangi bir karakter (yeni satır karakteri hariç) |
^ | … ile başlar |
$ | … ile biter |
* | Sıfır veya daha fazla olay |
+ | Bir veya daha fazla olay |
{ } | Tam olarak belirtilen sayıda oluşum |
| | Ya da |
Şimdi yukarıdaki karakterleri kullanarak örnekler oluşturacağız.
Örnek 1: Metinde geçen “a ve “k” (Küçük harf) arası bulunan harfleri listeleyim.
1 2 3 4 5 6 7 8 |
import re txt = "Python RegEx Kullanımı" x = re.findall("[a-k]", txt) print(x) |
Çıktı:
1 2 3 |
['h', 'e', 'g', 'a'] |
Örnek 2: Metindeki tüm sayısal karakterleri bulalım.
1 2 3 4 5 6 7 8 |
import re txt = "Python 100+ Örnek" x = re.findall("\d", txt) print(x) |
Çıktı:
1 2 3 |
['1', '0', '0'] |
Örnek 3: “He” ile başlayan, ardından iki (herhangi) karakter ve “o” ile başlayan bir dizi arayın:
1 2 3 4 5 6 7 8 |
import re txt = "hello world" x = re.findall("he..o", txt) print(x) |
Çıktı:
1 2 3 |
['hello'] |
Örnek 4: Metnin Python ile başlayıp başlamadığını kontrol edelim.
1 2 3 4 5 6 7 8 9 10 11 |
import re txt = "python örnekleri" x = re.findall("^python", txt) if x: print('Bu string ifade "python" ile başlıyor') else: print("Eşleşme yok!") |
Çıktı:
1 2 3 |
Bu string ifade "python" ile başlıyor |
Örnek 5: Metnin “Örnek” ile bitip bitmediğini kontrol edelim.
1 2 3 4 5 6 7 8 9 10 11 |
import re txt = "Python Örnekleri 100+ Örnek" x = re.findall("Örnek$", txt) if x: print('String "Örnek" ile bitiyor') else: print("Eşleşme yok!") |
Çıktı:
1 2 3 |
String "Örnek" ile bitiyor |
Örnek 6: Dizenin “ma” karakteri içerip içermediğini kontrol edin:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
import re txt = "algoritmaornekleri.com sitesi ile algoritma ve programlama öğrenin." x = re.findall("max*", txt) print(x) if x: print("Evet, en az bir eşleşme var!") else: print("Eşleşme Yok!") |
Çıktı:
1 2 3 4 |
['ma', 'ma', 'ma'] Evet, en az bir eşleşme var! |
Örnek 7: Dizenin “i” ve ardından tam olarak iki “l” karakteri içerip içermediğini kontrol edin.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
import re txt = "Killi Humuslu Kireçli" #Dizenin "i" ve ardından tam olarak iki "l" karakteri içerip içermediğini kontrol edin: x = re.findall("il{2}", txt) print(x) if x: print("Eşleşme Var!") else: print("Eşleşme Yok!") |
Çıktı:
1 2 3 4 |
['ill'] Eşleşme Var! |
Örnek 8: Metinde Python ya da ASP olup olmadığını kontrol edin.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
import re txt = "Python Java C# PHP" x = re.findall("Python|ASP", txt) print(x) if x: print("Eşleşme Var!") else: print("Eşleşme Yok") |
Çıktı:
1 2 3 4 |
['Python'] Eşleşme Var! |
Özel Diziler
Özel bir sıra, \ ‘nin ardından aşağıdaki listede bulunan karakterlerden biridir ve özel bir anlamı vardır.
Karakter | Açıklama |
\A | Belirtilen karakterler dizenin başındaysa bir eşleşme döndürür |
\b | Belirtilen karakterlerin bir kelimenin başında veya sonunda olduğu bir eşleşme döndürür |
\B | Belirtilen karakterlerin bulunduğu bir eşleşme döndürür, ancak bir kelimenin başında (veya sonunda) DEĞİLDİR |
\d | Dizenin basamak içerdiği bir eşleşme döndürür (0-9 arası sayılar) |
\D | Dizenin rakam içermediği bir eşleşme döndürür |
\s | Dizenin beyaz boşluk (boşluk karakteri) içerdiği bir eşleşme döndürür |
\S | Dizenin beyaz boşluk karakteri İÇERMEDİĞİ bir eşleşme döndürür |
\w | Dizenin herhangi bir kelime karakteri içerdiği bir eşleşme döndürür (a’dan Z’ye karakterler, 0-9 arası rakamlar ve alt çizgi _ karakteri) |
\W | Dizenin herhangi bir kelime karakteri İÇERMEDİĞİ bir eşleşme döndürür |
\Z | Belirtilen karakterler dizenin sonundaysa bir eşleşme döndürür |
Kümeler
Küme, özel bir anlamı olan bir çift köşeli parantez [ ] içinde yer alan karakter kümesidir:
Aşağıda bu konuyla ilgili örnekleri inceleyebilirsiniz.
Örnekler:
Örnek: Dizede a, r veya n karakterleri olup olmadığını kontrol edin.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
import re txt = "python dersleri" #Dizede a, r veya n karakterleri olup olmadığını kontrol edin: x = re.findall("[arn]", txt) print(x) if x: print("Eşleşme Var!") else: print("Eşleşme Yok!") |
Örnek: Dizede a-n arası karakter olup olmadığını kontrol edin:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
import re txt = "python dersleri" #Dizede a-n arası karakter olup olmadığını kontrol edin: x = re.findall("[a-n]", txt) print(x) if x: print("Eşleşme Var!") else: print("Eşleşme Yok!") |
Örnek: Dizede a, r veya n dışında başka karakterler olup olmadığını kontrol edin:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
import re txt = "python dersleri" #Dizede a-n arası karakter olup olmadığını kontrol edin: x = re.findall("[^arn]", txt) print(x) if x: print("Eşleşme Var!") else: print("Eşleşme Yok!") |
Çıktı:
1 2 3 4 |
['p', 'y', 't', 'h', 'o', ' ', 'd', 'e', 's', 'l', 'e', 'i'] Eşleşme Var! |
Örnek: Dizede 0, 1, 2 veya 3 rakamlarının olup olmadığını kontrol edin:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
import re txt = "python dersleri" x = re.findall("[0123]", txt) print(x) if x: print("Eşleşme Var!") else: print("Eşleşme Yok!") |
Çıktı:
1 2 3 4 |
[] Eşleşme Yok! |
Örnek: Dizede herhangi bir rakam olup olmadığını kontrol edin
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
import re txt = "python dersleri" x = re.findall("[0-9]", txt) print(x) if x: print("Eşleşme Var!") else: print("Eşleşme Yok!") |
Çıktı:
1 2 3 4 |
[] Eşleşme Yok! |
Örnek: Dizede 00 ile 59 arasında iki basamaklı sayı olup olmadığını kontrol edin.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
import re txt = "Bu sabah ders 11:45 te başlıyor." #Check if the string has any two-digit numbers, from 00 to 59: x = re.findall("[0-5][0-9]", txt) print(x) if x: print("Eşleşme Var!") else: print("Eşleşme Yok!") |
Çıktı:
1 2 3 4 |
['11', '45'] Eşleşme Var! |
Örnek: Dizede a’dan z’ye küçük harf ve A’dan Z’ye büyük harf herhangi bir karakter olup olmadığını kontrol edin:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
import re txt = "Bu sabah ders 11:45 te başlıyor." x = re.findall("[a-zA-Z]", txt) print(x) if x: print("Eşleşme Var!") else: print("Eşleşme Yok!") |
Çıktı:
1 2 3 4 |
['B', 'u', 's', 'a', 'b', 'a', 'h', 'd', 'e', 'r', 's', 't', 'e', 'b', 'a', 'l', 'y', 'o', 'r'] Eşleşme Var! |
Örnek: Dizede + karakter olup olmadığını kontrol edin.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
import re txt = "Bu sabah ders 11:45 te başlıyor." x = re.findall("[+]", txt) print(x) if x: print("Eşleşme Var!") else: print("Eşleşme Yok!") |
Çıktı:
1 2 3 4 |
[] No match |
[…] Python RegEx […]