Python - İleri Seviye Python

RegEx

Yayın tarihi :01-Ara-21
Bölüm kodlarını ve/veya veri setlerini indir.

RegEx (Regular Expression-Düzenli ifade), bir dizenin (string ifadenin) aranan bir kelimeyi içerip içermedeiğini kontrol etmek için kullanılan bir Python modülüdür.

Modulü kullanabilmek için kütüphanesinin içe aktarılması gerekmektedir.

import re

İlk olarak re modülünün altında nelerin olduğuna bakalım.

print(dir(re))

Çıktı:

['A', 'ASCII', 'DEBUG', 'DOTALL', 'I', 'IGNORECASE', 'L', 'LOCALE', 'M', 'MULTILINE', 'Match', 'Pattern',
 'RegexFlag', 'S', 'Scanner', 'T', 'TEMPLATE', 'U', 'UNICODE', 'VERBOSE', 'X', '_MAXCACHE', '__all__', 
'__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__',
 '__version__', '_cache', '_compile', '_compile_repl', '_expand', '_locale', '_pickle', '_special_chars_map', 
'_subx', 'compile', 'copyreg', 'enum', 'error', 'escape', 'findall', 'finditer', 'fullmatch', 'functools',
 'match', 'purge', 'search', 'split', 'sre_compile', 'sre_parse', 'sub', 'subn', 'template']
#aşağıdaki örneklerde Albert Einstein'ın söylemiş olduğu sözü kullanacağız.
text="Başarılı bir adam olmak için çalışmayın aksine önemli bir adam olmak için çalışın."
  1. re.findAll(): Dize içerisinde kaç tane aranan kelimeden varsa onları liste şeklinde getirir. re.findAll("aranacak_kelime","dizenin_tamamı") şeklinde kullanılır. Büyük-küçük harfe duyarlıdır.
    result=re.findall("adam",text)
    print(result)

    Çıktı:

    ['adam', 'adam']
  2. re.search(): Dizde içerisinde aranan kelime varsa kelimenin yeri gösterir. re.search("aranacak_kelime","dizenin_tamamı") şeklinde kullanılır.
    result=re.search("adam",text)
    print(result)

    Çıktı:

    <re.Match object; span=(13, 17), match='adam'>
    #oluşan result değeri bir object olduğu için içindeki değerlere de erişim sağlanabilir.
    print(result.span())
    print(result.start()) #başladığı sıra
    print(result.end()) #bittiği sıra

    Çıktı:

    (13, 17)
    13
    17
  3. re.finditer(): re.search() ile ilk eşleşen kelime döndürülür ama finditer() ile ilgili dize içersindeki tüm eşleşen değerleri döndürebiliriz. re.finditer("aranacak_kelime","dizenin_tamamı") şeklinde kullanılır.
    result=re.finditer("adam",text)
    for item in re.finditer("adam",text):
        print(item.span())

    Çıktı:

    (13, 17)
    (58, 62)
  4. re.split(): Dizeyi istenilen yerlerden bölmek için kullanılır. String değişkenler konusunda işlemiş olduğumuz .split() komutu ile aynı işlemi yapmaktadır. re.split("ayrım_kelimesi","dizenin tamamı") şeklinde kullanılır.
    result=re.split(" ",text) #boşluklardan ayır
    print(result)

    Çıktı:

    ['Başarılı', 'bir', 'adam', 'olmak', 'için', 'çalışmayın', 'aksine', 'önemli', 'bir', 'adam',
     'olmak', 'için', 'çalışın.']
  5. re.sub(): Dize içerisinde bulunan bir değerin yerine yeni değeri koymak için kullanılır. re.sub("eski_deger","yeni_değer","dizenin tamamı") şeklinde kullanılır.
    result=re.sub("adam","Adam2",text) #adam kelimesini Adam2 ile değiştirecektir.
    print(result)

    Çıktı:

    Başarılı bir Adam2 olmak için çalışmayın aksine önemli bir Adam2 olmak için çalışın.

Meta Karakterler

  • Köşeli parantez [ ]: Eşleştirmek istediğimiz karakterleri belirtir. İçerisine yazılan her harfi ayrı ayrı kontrol eder. 
    #[a-e] ile [abcde] aynıdır
    #[1-6] ile [123456] aynıdır.
    text="arinway.com"
    text2="1453-2022"
    print(re.findall("[arinway]",text))
    print(re.findall("[a-e]",text))
    print(re.findall("[1-4]",text2))

    Çıktı:

    ['a', 'a', 'c']
    ['1', '4', '3', '2', '2', '2'] 

     * Eğer ifadenin başında "^" ifadesi varsa köşeli parantez içersinde olanlar haricindekileri bulur.

    text="arinway.com"
    text2="1453-2022"
    print(re.findall("[^arinway]",text))
    print(re.findall("[^a-e]",text))
    print(re.findall("[^1-4]",text2))

    Çıktı:

    ['.', 'c', 'o', 'm']
    ['r', 'i', 'n', 'w', 'y', '.', 'o', 'm']
    ['5', '-', '0']
  • Nokta "." : Eğer arama içerisinde ".","..","..." gibi karakterler varsa nokta sayısı kadar eşleşme sağlar. 
    text="arinway.com"
    print(re.findall(".",text))
    print(re.findall("..",text))
    print(re.findall("...",text))

    Çıktı:

    ['a', 'r', 'i', 'n', 'w', 'a', 'y', '.', 'c', 'o', 'm']
    ['ar', 'in', 'wa', 'y.', 'co']
    ['ari', 'nwa', 'y.c']
  • Şapka "^": Eğer karakter başında "^" işareti varsa bu karakterle başlayıp başlamadığını kontrol eder. Başlıyorsa ilgili değeri döndürürken, başlamıyorsa da boş liste döndürür.
    text="arinway.com"
    print(re.findall("^ar",text))
    print(re.findall("^c",text))

    Çıktı:

    ['ar']
    []
  • Dolar "$": Eğer karakter sonunda "$" işareti varsa bu karakterle bitip bitmediğini kontrol eder. Bitiyorsa ilgili değeri döndürürken, bitmiyorsa da boş liste döndürür.

    text="arinway.com"
    print(re.findall("co$",text))
    print(re.findall("om$",text))

    Çıktı:

    []
    ['om']
  • Ters eğik çizgi "\": Tüm meta karakterler de dahil olmak üzere çeşitli karakterlerden kaçmak için kullanılır. Örnek olarak ^ ifadesi aranmak isteniyorsa "\^" şeklinde aranma yapılmalıdır.
  • Özel diziler: Yaygın olarak kullanılan kalıpların yazılmasını kolaylaştırır.
    • \A : aranan kelimeden önce geliyorsa ve aranan kelime aranacak kelimenin başında ise eşleşir.
      text="merhaba arinway.com"
      print(re.findall("\Aarinway",text))
      print(re.findall("\Amerhaba",text))

      Çıktı:

      []
      ['merhaba']
    • \b :aranan kelime aranacak kelimenin başında veya sonunda ise eşleşir.
      text="merhaba arinway.com"
      print(re.findall(r"ba\b",text))
      print(re.findall(r"\bme",text))
      print(re.findall(r"\bway",text))

      Çıktı:

      ['ba']
      ['me']
      []
    • \B :aranan kelime aranacak kelimenin başında veya sonunda değilse eşleşir.
      text="merhaba arinway.com"
      print(re.findall(r"ba\B",text))
      print(re.findall(r"\Bme",text))
      print(re.findall(r"\Bway",text))

      Çıktı:

      []
      []
      ['way']
    • \d : [0-9] sayılarını temsil eder. Aranan kelimedeki sayısal değerleri alır.
      text="İstanbul 1453'te fethedildi"
      print(re.findall("\d",text))

      Çıktı:

      ['1', '4', '5', '3']
    • \D: [0-9] sayıları haricindeki karakterlerle eşlenir. Aranan kelimedeki sayısal olmayan değerleri alır.
      text="İstanbul 1453'te fethedildi"
      print(re.findall("\D",text))

      Çıktı:

      ['İ', 's', 't', 'a', 'n', 'b', 'u', 'l', ' ', "'", 't', 'e', ' ', 'f', 'e', 't', 'h', 'e', 'd', 'i', 'l', 'd', 'i']
      
    • \s: Bir dizenin boşluk içerip içermediğine bakar. Boşluk içeriyorsa sayısı kadar liste elemanı döndürür. [\t\n\t\f\v]

      text="İstanbul 1453'te fethedildi"
      print(re.findall("\s",text))

      Çıktı:

      [' ', ' ']
    • \S: Bir dizenin boşluk değilde herhangi bir karakter içerip içermediğine bakar. [^ \t\n\t\f\v]
      text="İstanbul 1453'te fethedildi"
      print(re.findall("\S",text))

      Çıktı:

      ['İ', 's', 't', 'a', 'n', 'b', 'u', 'l', '1', '4', '5', '3', "'", 't', 'e', 'f', 'e', 't', 'h', 'e', 'd', 'i', 'l', 'd', 'i']
    • \w: Bir dizenin alfanümerik karakterler(&,ά,λ,φ,α,_ vb.) içerip içermediğine bakar. Alfanümerik karakterler haricindeki değerlerle eşlenir. [a-zA-Z0-9]
      text="Ali & Zehra eve geldiler."
      print(re.findall("\w",text))

      Çıktı:

      ['A', 'l', 'i', 'Z', 'e', 'h', 'r', 'a', 'e', 'v', 'e', 'g', 'e', 'l', 'd', 'i', 'l', 'e', 'r']
    • \W: Bir dizenin alfanümerik karakterler(&,ά,λ,φ,α,_ vb.) içerip içermediğine bakar. Alfanümerik karakterleri ile eşlenir. [^a-zA-Z0-9]
      text="Ali & Zehra eve geldiler."
      print(re.findall("\W",text))

      Çıktı:

      [' ', '&', ' ', ' ', ' ', '.']
Paylaş:

Yorum Yap (*Yorumunuza kod eklemek isterseniz Kod Parçacığı Ekle butonuna tıklayarak ekleyebilirsiniz.)

Yorumlar

Henüz hiç yorum yapılmamış, ilk yorum yapan sen ol.