Python'da Normal İfadeler [Örneklerle]: Nasıl Uygulanır?

Yayınlanan: 2021-01-29

Herhangi bir kaynaktan ham veri işlenirken, verilerden anlamlı içgörüler elde edilebilmesi için doğru bilginin çıkarılması önemlidir. Bazen, özellikle metinsel veriler söz konusu olduğunda, verilerden belirli bir kalıbı çıkarmak zorlaşır.

Metinsel veriler, anket formları, hurdaya çıkarılan web siteleri ve diğer kaynaklar aracılığıyla toplanan bilgi paragraflarından oluşur. Panda işlevleriyle veya diğer özel işlevlerle farklı dize erişimcilerinin değiştirilmesi işi halledebilir, ancak daha spesifik bir modelin elde edilmesi gerekiyorsa ne olur? Normal ifadeler bu işi kolaylıkla yapar.

İçindekiler

Normal İfade (RegEx) nedir?

Normal ifade, dizeler için bir dizi karakterin temsilidir. Doğru bilgiyi veri havuzundan ayırmaya yardımcı olan dizelerdeki belirli bir model için genelleştirilmiş bir formül sunar. İfade genellikle kuralı oluşturmaya yardımcı olan sembollerden veya karakterlerden oluşur, ancak ilk bakışta garip ve kavraması zor görünebilir. Bu sembollerin burada açıklanan anlamları vardır.

Dünyanın en iyi Üniversitelerinden veri bilimi derslerini öğrenin . Kariyerinizi hızlandırmak için Yönetici PG Programları, Gelişmiş Sertifika Programları veya Yüksek Lisans Programları kazanın.

RegEx'teki meta karakterler

  1. '.': bir joker karakterdir, tek bir karakterle eşleşir (herhangi bir karakter, ancak yalnızca bir kez)
  2. ^: dizenin başlangıcını belirtir
  3. $: dizenin sonunu belirtir
  4. [ ]: [ ] içindeki karakter gruplarından biriyle eşleşir
  5. [az]: a,b,…,z karakter aralığından biriyle eşleşir
  6. [^abc] : a,b veya c olmayan bir karakterle eşleşir.
  7. a|b: a veya b ile eşleşir, burada a ve b dizelerdir
  8. () : operatörler için kapsam belirleme sağlar
  9. \ : özel karakterler için kaçış sağlar (\t, \n, \b, \.)
  10. \b: kelime sınırıyla eşleşir
  11. \d : [0-9]'a eşdeğer herhangi bir rakam
  12. \D: herhangi bir rakam olmayan, [^0-9]'a eşdeğer
  13. \s : [ \t\n\r\f\v] ile eşdeğer herhangi bir boşluk
  14. \S : herhangi bir boşluk olmayan, [^\t\n\r\f\v] ile eşdeğer
  15. \w : [a-zA-Z0-9_] ile eşdeğer herhangi bir alfasayısal
  16. \W : alfasayısal olmayan, [^a-zA-Z0-9_] eşdeğeri
  17. '*': sıfır veya daha fazla oluşumla eşleşir
  18. '+': bir veya daha fazla oluşumla eşleşir
  19. '?': sıfır veya bir oluşumla eşleşir
  20. {n}: tam olarak n tekrar, n>=0
  21. {n,}: en az n tekrar
  22. {,n}: en fazla n tekrar
  23. {m,n}: en az m tekrar ve en fazla n tekrar

Geçici Çözümü Anlamak için Örnekler

Artık bir RegEx oluşturan karakterlerin farkında olduğunuza göre, bunun nasıl çalıştığını görelim:

1. E-posta Filtreleme:

Uzun bir paragraftaki tüm e-posta kimliklerini filtrelemek istediğinizi varsayalım. Bir e-postanın genel biçimi:

kullanıcıadı@etkialanı_adı. <top_level_domain>

Kullanıcı adı alfasayısal olabilir ve bu nedenle onları belirtmek için \w kullanabiliriz ancak kullanıcının ad.soyad olarak bir hesap oluşturma olasılığı vardır. Bunun üstesinden gelmek için noktadan kaçacağız ve bir dizi karakter yaratacağız. Ardından, alan_adı yalnızca alfabetik olmalıdır ve bu nedenle A-Za-z bunu gösterecektir. Üst düzey alan adı genellikle .com, .in, .org'dur, ancak kullanım durumuna bağlı olarak, tüm alfabe aralığını seçebilir veya belirli alan adlarını filtreleyebilirsiniz.

Bunun normal ifadesi şöyle görünecektir:

^([a-zA-Z0-9_.]+)@([a-zA-Z0-9-]+)\.([a-zA-Z]{2,4})$

Burada kalıbın başlangıcı ve bitişi de bildirilir ve üst düzey alan yalnızca 2-4 karakter içerebilir. Tüm ifadenin 3 grubu vardır.

2. Tarih Filtreleme:

Çıkardığınız metinsel bilgiler tarihleri ​​içerebilir ve sizin için ayrı bir sütun sunulmaz. Tarihler, verilerin filtrelenmesine veya zaman serisi analizine yardımcı olan önemli bir faktördür. Belirli bir tarih, tarih ve ayın değişebileceği tarih/ay/yıl biçimini alır.

Ayrıca aylar sayısal olabileceği gibi alfabe şeklinde ve alfabelerde kısaltmalar veya tam adlar şeklinde olabilir. Esas olarak, verilerimizde kaç vakanın bulunduğuna bağlıdır ve yalnızca isabet ve deneme yoluyla elde edilebilir.

Çeşitli tarihleri ​​kapsayan basit bir RegEx aşağıda gösterilmiştir:

^(\d{1,2})[/-](\d{1,2})[/-](\d{2,4})$

Bu model, tarih biçimini kısa çizgi veya eğik çizgi ile yakalar. Tarih ve ay bir veya iki basamakla ve yıl en fazla dört basamakla sınırlıdır. İlgili varlıklar, bu durumda isteğe bağlı olan gruplar olarak yakalanır.

Ayrıca Okuyun: Python Proje Fikirleri ve Konuları

Python'da Nasıl Uygulanır?

Yeni oluşturduğumuz düzenli ifadeler, varsaydığımız ilgili kriterleri karşılıyor ve şimdi bunları Python kodunda uygulama zamanı. Python, bu ifadelerin çalışmasını uygulayan re modül adında yerleşik bir modüle sahiptir. Basitçe,

yeniden içe aktar

desen = '^(\d{1,2})[/-](\d{1,2})[/-](\d{2,4})$'

Re modülü çok çeşitli işlevler sunar ve hepsinin farklı kullanım durumları vardır. Bazı önemli işlevlere bakalım:

  1. re.findall(): Bu işlev, geçirilen desene göre test dizesindeki tüm eşleşmelerin listesini döndürür. Bu örneği düşünün:

string = '25-12-1999 buraya rastgele metin 25/12/1999'

print(re.findall(desen, string))

Yalnızca bir listedeki dizedeki tarihleri ​​döndürür.

  1. re.sub(): Bu fonksiyondaki Sub, ikame anlamına gelir ve aynı şeyi yapar. Kibritleri sağlanan değiştirme değeriyle değiştirir. İşlev, sayının modelini, dizesini, değiştirme değerini ve isteğe bağlı parametresini alır. Count parametresi, kaç tane örneği değiştirmek istediğinizi kontrol eder. Varsayılan olarak, hepsini değiştirir ve yeni dizeyi döndürür.
  2. re.split(): Dizeyi eşleşen sitelerde böler ve parçaları bir listede ayrı dizeler olarak döndürür.
  3. re.search(): Bu işlev, yakaladığı tüm gruplarla birlikte dizede bulunan eşleşmeyi içeren eşleşme nesnesini döndürür. Bu grupları ayrı sütunlar halinde saklamak istediğinizde kullanışlı olabilir.

Bunu gerçekleştirmek için:

eşleşme = yeniden arama(desen, dize)

maç.grubu(1)

Group(0) tüm eşleşmeyi döndürür ve karşılık gelen sonraki sayılar diğer grupları belirtir.

Ödeme: Hindistan'da Python Geliştirici Maaşı

Çözüm

Normal ifadeler, metinsel verilerdeki kalıpları yakalamanın güçlü bir yoludur. Çeşitli karakterlerin kontrolünü elinde tutmak biraz ekstra çaba gerektirebilir ancak karmaşık kullanım durumlarında veri çıkarma sürecini basitleştirir.

Python'da bazı Normal İfade örnekleri verin.

Aşağıdaki örnekler, Python'daki işleyişi veya normal ifadeleri gösterir:
a. E-posta Filtreleme
Normal ifadeler, e-postaları filtrelemek için verimli bir şekilde kullanılabilir. E-posta filtreleme için normal sözdizimi - ^((a-zA-Z0-9_.)+)@((a-zA-Z0-9-)+).((a-zA-Z){2,4} )$
Bu ifade üç gruba ayrılmıştır ve kullanıcı adı alfasayısal olduğunda ve bir nokta olduğunda, örneğin "first.last@" gibi birçok durumu ele alır. Bu ifade, 2-4 karakter içeren üst alanlar için kullanılacaktır.
B. Tarih Filtreleme
Veri filtrelemeyi işlerken tarihler çok önemli bir faktör olabilir. Uğraştığınız metinsel veriler genellikle tarihler içerir. Normal bir metinden verileri çıkaran normal ifade veya RegEx şudur: - ^(d{1,2})(/-)(d{1,2})(/-)(d{2,4})$
Tarih ve ay 2 haneye kadar, ay 4 haneye kadar olabilir.

Python'da düzenli ifadelerin uygulanmasında yer alan işlevler nelerdir?

Python'da düzenli ifadelerin uygulanmasında aşağıdaki işlevler yer alır:
1. re.findall() - Bu işlev, metin dizesiyle eşleştirilecek bir kalıbı kabul eder. Eşleşen dizeleri döndürür.
2. re.sub() - “re.sub”daki Sub, “ikame” anlamına gelir. Bu yöntem, “re.findall()” işleviyle tam olarak aynı işlevi yerine getirir.
3. re.split() - Parametresi olarak kendisine iletilecek olan ayırıcının etrafındaki stringleri ayırır. Ayırıcı herhangi bir şey olabilir.
4. re.search() - Bu işlev, yakaladığı diğer dize gruplarıyla birlikte dizede bulunan eşleşmeyi döndürür.

Normal ifadelerde kullanılan bazı özel diziler nelerdir?

Aşağıdakiler, düzenli ifadelerde kullanılan özel dizilerden bazılarıdır:
1. A: Dizenin verilen karakterle başlayıp başlamadığını kontrol edin.
2. (İleri Eğik Çizgi) b: Dizenin verilen karakterle başlayıp bitmediğini kontrol eder. (string)/b başlangıcı kontrol ederken (ters eğik çizgi) b (string) sonu kontrol eder.
3. B: B'nin tam tersidir. Dizenin verilen karakterle başlayıp başlamadığını kontrol eder.
4. d: Dizideki sayısal değerleri kontrol eder.
5. D: Sayısal olmayan herhangi bir değer veya karakter olup olmadığını kontrol eder.
6. s: Herhangi bir boşluk karakteri olup olmadığını kontrol eder.
7. S: Boşluk olmayan herhangi bir karakter olup olmadığını kontrol eder.
8. w: Herhangi bir alfasayısal karakter olup olmadığını kontrol eder.
9. W: Herhangi bir alfasayısal olmayan karakter olup olmadığını kontrol eder.