Python 3 için Re modülü için belgeler . Normal ifadeler için yeniden modül

Normal ifadeler, hemen hemen tüm programlama dillerinin çok popüler bir bileşenidir. İhtiyacınız olan bilgilere hızlı bir şekilde erişmenize yardımcı olurlar. Özellikle metnin işlenmesi gerektiğinde kullanılırlar. Python, varsayılan olarak özel bir modül ile birlikte gelir. re, düzenli ifadelerle çalışmaktan sorumludur.

Bugün genel olarak ne olduğu, onlarla nasıl çalışılacağı ve modülün nasıl çalıştığı hakkında ayrıntılı olarak konuşacağız. re yardım edecek.

Normal ifadeler: bir giriş

Düzenli ifadelerin kullanım alanları nelerdir? Neredeyse hepsi. Örneğin, bunlar:

  1. Metin doğrulaması gerektiren web uygulamaları. Tipik bir örnek, çevrimiçi posta istemcileridir.
  2. Metinler, veritabanları vb. ile ilgili diğer projeler.

Sözdizimini ayrıştırmaya başlamadan önce, kütüphanenin işleyişinin temel ilkelerini daha ayrıntılı olarak anlamalıyız. re ve genel olarak, bu konuda genel olarak iyi olan şey. Ayrıca, kullanım mekanizmalarını açıklayacağımız gerçek uygulamadan örnekler vereceğiz. Metinle çok çeşitli işlemleri gerçekleştirmenize uygun böyle bir şablon oluşturabilirsiniz.

Re kitaplığındaki şablon nedir?

Bununla, diğer işlevleri daha uyumlu hale getirmek için çeşitli türlerde bilgi arayabilir, bunlara karşılık gelen bilgileri alabilirsiniz. Ve elbette, bu verileri işlemek için.

Örneğin, aşağıdaki şablonu alın: s+. Herhangi bir boşluk karakteri anlamına gelir. Buna bir artı işareti eklerseniz, bu, desenin birden fazla boşluk içerdiği anlamına gelir. İle çağrılan sekme karakterleriyle bile eşleşebilir. t+.

Bunları kullanmadan önce kütüphaneyi içe aktarmanız gerekir. Re. Bundan sonra şablonu derlemek için özel bir komut kullanıyoruz. Bu iki basamakta yapılır.

>>> yeniden içe aktar

>>> normal ifade = yeniden derleme('s+')

Spesifik olarak, bu kod kullanılabilecek bir şablon derleme işlemini gerçekleştirir. örneğin boşluk aramak için (bir veya daha fazla).

Normal ifadeler kullanarak farklı dizelerden ayrı bilgi alma

Aşağıdaki bilgileri içeren bir değişkenimiz olduğunu varsayalım.

>>> metin = “””100 INF Bilişim

213 MAT Matematik  

156 TR İngilizce»»»

Üç eğitim kursu içerir. Her biri üç bölümden oluşur - numara, kod ve ad. Bu kelimeler arasındaki aralığın farklı olduğunu görüyoruz. Bu satırı ayrı sayılara ve kelimelere bölmek için ne yapmalı? Bu hedefe ulaşmak için iki yöntem vardır:

  1. fonksiyon çağırmak yeniden bölme.
  2. işlevi uygula bölmek için regex.

Değişkenimiz için yöntemlerin her birinin sözdizimini kullanma örneği.

>>> re.split('s+', metin)  

# veya

>>> normal ifade.split(metin)

Çıktı: ['100', 'INF', 'Bilgisayar Bilimi', '213', 'MAT', 'Matematik', '156', 'ENG', 'İngilizce']

Genel olarak her iki yöntem de kullanılabilir. Ancak, işlevi birden çok kez kullanmak yerine normal bir ifade kullanmak aslında çok daha kolaydır. yeniden bölme.

Üç işlevli eşleşmeleri bulma

Diyelim ki bir dizgeden yalnızca sayıları çıkarmamız gerekiyor. Bunun için ne yapılması gerekiyor?

yeniden bul()

İşte işlev için bir kullanım durumu hepsini bul(), normal ifadelerle birlikte, bir metin değişkeninden bir veya daha fazla sayının oluşumlarını çıkarmanıza izin verir.

>>> yazdır(metin)  

100 INF Bilişim

213 MAT Matematik  

156 TR İngilizce

>>> regex_num = yeniden derleme('d+')  

>>> regex_num.findall(metin)  

['100', '213', '156']

d sembolüyle birlikte, bir değişken veya metinde bulunan herhangi bir sayısal değeri kesinlikle belirten bir şablon kullandık. Ve oraya bir + eklediğimiz için bu, en az bir sayının mevcut olması gerektiği anlamına gelir. 

Bir eşleşmenin bulunması için bir rakamın bulunmasının gerekli olmadığını belirtmek için * işaretini de kullanabilirsiniz.

Ama bizim durumumuzda, + kullandığımız için, ile çıkardık hepsini bul() Metinden derslerin 1 veya daha fazla dijital tanımı. Bu nedenle, bizim durumumuzda düzenli ifadeler, işlev için ayarlar görevi görür.

yeniden arama() vs Rövanş()

Fonksiyonların adından da tahmin edebileceğiniz gibi, ilk önce metinde bir eşleşme arar. Soru: Aralarındaki fark nedir? hepsini bul? Buradaki nokta, önceki işlev gibi bir liste biçiminde bulunan tüm sonuç dizisini değil, desenle eşleşen belirli bir nesneyi döndürmesidir.

Buna karşılık, re.match işlevi de aynı şeyi yapar. Sadece sözdizimi farklıdır. Şablon en başa yerleştirilmelidir. 

Bunu gösteren bir örnek verelim.

>>> # metin içeren bir değişken oluşturun

>>> text2 = «»»INF Bilişim

213 MAT Matematik 156″»»  

>>> # normal ifadeyi derleyin ve kalıpları arayın

>>> regex_num = yeniden derleme('d+')  

>>> s = normal ifade_num.arama(metin2)  

>>> print('İlk dizin: ', s.start())  

>>> print('Son dizin: ', s.end())  

>>> print(text2[s.start():s.end()]) 

İlk dizin: 17 

Son dizin: 20

213

Farklı bir şekilde benzer bir sonuç elde etmek istiyorsanız, işlevi kullanabilirsiniz. grup().

Metnin bir kısmını Re kitaplığıyla değiştirme

Metni değiştirmek için işlevi kullanın re.sub(). Ders listemizin biraz değiştiğini varsayalım. Her dijital değerden sonra bir sekmemiz olduğunu görüyoruz. Görevimiz, tüm bu diziyi tek bir satırda birleştirmek. Bunu yapmak için s+ ifadesini değiştirmemiz gerekiyor. geçmek 

Orijinal metin şuydu:

# metin içeren bir değişken oluşturun

>>> metin = “””100 INF t Bilişim

213 MAT t Matematik  

156 TR t İngilizce»»»  

>>> yazdır(metin)  

100 BİLGİ bilişim

213 MAT matematik  

156 TR İngilizce

İstenen işlemi gerçekleştirmek için aşağıdaki kod satırlarını kullandık.

# bir veya daha fazla boşluğu 1 ile değiştirin

>>> normal ifade = yeniden derleme('s+')  

>>> print(regex.sub(' ', metin))  

Sonuç olarak, bir satırımız var. 

101 COM Bilgisayarları 205 MAT Matematik 189 ENG İngilizce

Şimdi başka bir problem düşünün. Boşluk koyma görevi ile karşı karşıya değiliz. Tüm ders adlarının yeni bir satırda başlaması bizim için çok daha önemli. Bunu yapmak için, istisnaya yeni bir satır ekleyen başka bir ifade kullanılır. Bu nasıl bir ifade?

Kütüphane Re negatif eşleştirme gibi bir özelliği destekler. Eğik çizgiden önce bir ünlem işareti içermesi bakımından doğrudan olandan farklıdır. Yani yeni satır karakterini atlamamız gerekiyorsa n yerine !n yazmamız gerekiyor.

Aşağıdaki kodu alıyoruz.

# yeni satır hariç tüm boşlukları kaldır  

>>> normal ifade = yeniden derleme('((?!n)s+)')  

>>> print(regex.sub(' ', metin))  

100 INF Bilişim

213 MAT Matematik  

156 TR İngilizce

Normal ifade grupları nelerdir?

Düzenli ifade grupları yardımıyla, istenen nesneleri tek satırda değil, ayrı elemanlar şeklinde elde edebiliriz. 

Ders numarasını, kodunu ve adını tek satırda değil, ayrı öğeler olarak almamız gerektiğini varsayalım. Görevi tamamlamak için çok sayıda gereksiz kod satırı yazmanız gerekecek. 

Aslında, görev büyük ölçüde basitleştirilebilir. Şablonu tüm girişler için derleyebilir ve parantezlerden almanız gereken verileri belirtebilirsiniz.

Çok az sayıda satır olacak. 

# kurs metni şablonları grupları oluşturun ve bunları ayıklayın

>>> Course_pattern = '([0-9]+)s*([A-ZY]{3})s*([a-zA-ZoY]{4,})'  

>>> re.findall(course_pattern, text)  

[('100', 'INF', 'Bilgisayar Bilimi'), ('213', 'MAT', 'Matematik'), ('156', 'ENG', 'İngilizce')]

“Açgözlü” eşleştirme kavramı

Standart olarak, normal ifadeler maksimum miktarda eşleşen veriyi çıkarmak için programlanır. Ve çok daha azına ihtiyacınız olsa bile.

Etiketi almamız gereken örnek bir HTML koduna bakalım.

>>> text = “Açgözlü Normal İfade Eşleştirme Örneği”  

>>> re.findall('', metin)  

['Açgözlü Normal İfade Eşleştirme Örneği']

Python, yalnızca bir etiketi çıkarmak yerine tüm dizeyi aldı. Bu yüzden açgözlü denir.

Ve sadece etiketi almak için ne yapmalı? Bu durumda tembel eşleme kullanmanız gerekir. Böyle bir ifadeyi belirtmek için kalıbın sonuna bir soru işareti eklenir.

Aşağıdaki kodu ve yorumlayıcının çıktısını alacaksınız.

>>> re.findall('', metin)  

[”, ”]

Yalnızca ilk karşılaşılan oluşumun alınması gerekiyorsa, yöntem kullanılır. arama ().

yeniden arama('', metin).grup()  

başlıklı bir kılavuz yayınladı

O zaman sadece açılış etiketi bulunacaktır.

Popüler İfade Şablonları

İşte en sık kullanılan düzenli ifade kalıplarını içeren bir tablo.

Python 3 için Re modülü için belgeler . Normal ifadeler için yeniden modül

Sonuç

Normal ifadelerle çalışmak için yalnızca en temel yöntemleri düşündük. Her durumda, onların ne kadar önemli olduğunu gördünüz. Ve burada, metnin tamamını mı yoksa tek tek parçalarını mı ayrıştırmanın gerekli olduğu, bir sosyal ağdaki bir gönderiyi analiz etmenin veya daha sonra işlemek için veri toplamanın gerekli olup olmadığı hiçbir fark yaratmaz. Düzenli ifadeler bu konuda güvenilir bir yardımcıdır.

Aşağıdakiler gibi görevleri gerçekleştirmenize izin verirler:

  1. E-posta adresi veya telefon numarası gibi verilerin biçimini belirtme.
  2. Bir dize almak ve onu birkaç küçük dizeye bölmek.
  3. Metinle arama, gerekli bilgileri çıkarma veya karakterlerin bir kısmını değiştirme gibi çeşitli işlemleri gerçekleştirin.

Normal ifadeler, önemsiz olmayan işlemleri gerçekleştirmenize de olanak tanır. İlk bakışta, bu bilimde ustalaşmak kolay değildir. Ancak pratikte her şey standartlaştırılmıştır, bu nedenle bir kez çözmeniz yeterlidir, bundan sonra bu araç yalnızca Python'da değil, başka herhangi bir programlama dilinde de kullanılabilir. Excel bile veri işlemeyi otomatikleştirmek için düzenli ifadeler kullanır. Yani bu aracı kullanmamak günahtır.

Yorum bırak