Python 3 üçün Re modulu üçün sənədlər. Normal ifadələr üçün Re modulu

Adi ifadələr demək olar ki, hər hansı bir proqramlaşdırma dilinin çox məşhur komponentidir. Onlar sizə lazım olan məlumatı tez əldə etməyə kömək edir. Xüsusilə, mətni emal etmək lazım olduqda istifadə olunur. Python standart olaraq xüsusi modulla gəlir. remüntəzəm ifadələrlə işləməkdən məsul olan .

Bu gün bunun ümumiyyətlə nə olduğu, onlarla necə işləmək və modulun necə olması barədə ətraflı danışacağıq re kömək edəcək.

Daimi ifadələr: giriş

Müntəzəm ifadələr hansı məqsədlər üçün istifadə olunur? Demək olar ki, hamısı. Məsələn, bunlar:

  1. Mətn təsdiqini tələb edən veb proqramlar. Tipik bir nümunə onlayn poçt müştəriləridir.
  2. Mətnlər, verilənlər bazası və s. ilə əlaqəli hər hansı digər layihələr.

Sintaksisi təhlil etməyə başlamazdan əvvəl kitabxananın işləməsinin əsas prinsiplərini daha ətraflı başa düşməliyik. re və ümumiyyətlə, bunda yaxşı olan nədir. Biz həmçinin real təcrübədən nümunələr verəcəyik, burada onların istifadə mexanizmini təsvir edəcəyik. Siz mətnlə müxtəlif əməliyyatları yerinə yetirmək üçün uyğun olan belə bir şablon yarada bilərsiniz.

Re kitabxanasında şablon nədir?

Bununla siz digər funksiyaları daha uyğunlaşdırmaq üçün müxtəlif növ məlumatları axtara, onlara uyğun olan məlumatları əldə edə bilərsiniz. Və, əlbəttə ki, bu məlumatları emal etmək üçün.

Məsələn, aşağıdakı şablonu götürün: s+. İstənilən boşluq simvolu deməkdir. Əgər ona bir artı işarəsi əlavə etsəniz, bu o deməkdir ki, nümunə birdən çox boşluq ehtiva edir. O, hətta çağırılan nişan simvollarına uyğun gələ bilər t+.

Onlardan istifadə etməzdən əvvəl kitabxananı idxal etməlisiniz Re. Bundan sonra şablonu tərtib etmək üçün xüsusi əmrdən istifadə edirik. Bu, iki mərhələdə həyata keçirilir.

>>> idxal yenidən

>>> regex = re.compile('s+')

Konkret olaraq, bu kod istifadə edilə bilən şablonun tərtib edilməsi əməliyyatını yerinə yetirir. məsələn, boşluqları axtarmaq üçün (bir və ya daha çox).

Normal ifadələrdən istifadə edərək müxtəlif sətirlərdən ayrıca məlumat əldə etmək

Tutaq ki, bizdə aşağıdakı məlumatları ehtiva edən dəyişən var.

>>> mətn = “””100 INF İnformatika

213 MAT Riyaziyyatı  

156 ENG İngilis dili»»»

Buraya üç təlim kursu daxildir. Onların hər biri üç hissədən ibarətdir - nömrə, kod və ad. Bu sözlər arasındakı intervalın fərqli olduğunu görürük. Bu sətri ayrı-ayrı rəqəmlərə və sözlərə bölmək üçün nə etmək lazımdır? Bu məqsədə çatmaq üçün iki üsul var:

  1. funksiya çağırın yenidən bölün.
  2. funksiyasını tətbiq edin parçalanması üçün regex.

Dəyişənimiz üçün metodların hər birinin sintaksisindən istifadə nümunəsidir.

>>> re.split('s+', mətn)  

# və ya

>>> regex.split(mətn)

Nəticə: ['100', 'INF', 'Kompüter Elmləri', '213', 'MAT', 'Riyaziyyat', '156', 'ENG', 'İngilis dili']

Ümumiyyətlə, hər iki üsuldan istifadə etmək olar. Lakin funksiyanı dəfələrlə istifadə etmək əvəzinə müntəzəm ifadədən istifadə etmək əslində çox asandır. yenidən bölün.

Üç funksiyalı uyğunluqların tapılması

Tutaq ki, sətirdən yalnız ədədləri çıxarmaq lazımdır. Bunun üçün nə etmək lazımdır?

re.findall()

Budur funksiya üçün istifadə halı findall(), bu, müntəzəm ifadələrlə birlikdə mətn dəyişəndən bir və ya bir neçə ədədin baş verməsini çıxarmağa imkan verir.

>>> çap (mətn)  

100 INF İnformatika

213 MAT Riyaziyyatı  

156 ENG İngilis dili

>>> regex_num = re.compile('d+')  

>>> regex_num.findall(mətn)  

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

d simvolu ilə birlikdə dəyişəndə ​​və ya mətndə yerləşən hər hansı rəqəmsal dəyəri göstərən şablondan istifadə etdik. Oraya bir + əlavə etdiyimiz üçün bu o deməkdir ki, ən azı bir ədəd olmalıdır. 

Uyğunluğun tapılması üçün rəqəmin olmasının tələb olunmadığını müəyyən etmək üçün * işarəsindən də istifadə edə bilərsiniz.

Ancaq bizim vəziyyətimizdə + istifadə etdiyimiz üçün çıxardıq findall() Mətndən kursların 1 və ya daha çox rəqəmsal təyinatı. Beləliklə, bizim vəziyyətimizdə müntəzəm ifadələr funksiyanın parametrləri kimi çıxış edir.

re.search() vs re.match()

Funksiyaların adından təxmin edə bildiyiniz kimi, ilk mətndə uyğunluğu axtarır. Sual: Aralarındakı fərq nədir findall? Məsələ ondadır ki, o, əvvəlki funksiya kimi siyahı şəklində tapılan nəticələrin bütün ardıcıllığını deyil, nümunəyə uyğun gələn konkret obyekti qaytarır.

Öz növbəsində, re.match funksiyası da eyni şeyi edir. Yalnız sintaksis fərqlidir. Şablon başlanğıcda yerləşdirilməlidir. 

Bunu sübut edən bir nümunə götürək.

>>> # mətn ilə dəyişən yaradın

>>> text2 = «»»INF İnformatika

213 MAT Riyaziyyat 156″»»  

>>> # regex tərtib edin və nümunələri axtarın

>>> regex_num = re.compile('d+')  

>>> s = regex_num.search(mətn2)  

>>> çap ('Birinci indeks: ', s.start())  

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

>>> çap (text2[s.start():s.end()]) 

Birinci indeks: 17 

Son indeks: 20

213

Bənzər nəticəni fərqli şəkildə əldə etmək istəyirsinizsə, funksiyadan istifadə edə bilərsiniz qrup().

Mətnin bir hissəsinin Re kitabxanası ilə əvəz edilməsi

Mətni əvəz etmək üçün funksiyadan istifadə edin re.sub(). Tutaq ki, kurslarımızın siyahısı bir az dəyişdi. Görürük ki, hər rəqəmsal dəyərdən sonra bir nişanımız var. Bizim vəzifəmiz bütün bu ardıcıllığı bir sətirdə birləşdirməkdir. Bunun üçün s+ ifadəsini əvəz etməliyik keçmək 

Orijinal mətn belə idi:

# mətn ilə dəyişən yaradın

>>> mətn = “””100 INF t İnformatika

213 MAT t Riyaziyyat  

156 ENG t İngilis dili»»»  

>>> çap (mətn)  

100 BİLGİ İnformatika

213 MAT Riyaziyyat  

156 İNG Ingilis

İstədiyiniz əməliyyatı yerinə yetirmək üçün aşağıdakı kod sətirlərindən istifadə etdik.

# bir və ya daha çox boşluğu 1 ilə əvəz edin

>>> regex = re.compile('s+')  

>>> çap (regex.alt(' ', mətn))  

Nəticədə bir xətt əldə edirik. 

101 COM Kompüterlər 205 MAT Riyaziyyat 189 ENG İngilis dili

İndi başqa bir problemi nəzərdən keçirin. Biz boşluq qoymaq vəzifəsi ilə qarşılaşmırıq. Bütün kurs adlarının yeni sətirdən başlaması bizim üçün daha vacibdir. Bunun üçün istisnaya yeni sətir əlavə edən başqa bir ifadə istifadə olunur. Bu hansı ifadədir?

kitabxana Re mənfi uyğunlaşma kimi bir xüsusiyyəti dəstəkləyir. O, birbaşadan fərqlənir ki, kəsikdən əvvəl nida işarəsi var. Yəni yeni sətir simvolunu atlamalı olsaq, o zaman n yerinə !n yazmalıyıq.

Aşağıdakı kodu alırıq.

# yeni sətirdən başqa bütün boşluqları silin  

>>> regex = re.compile('((?!n)s+)')  

>>> çap (regex.alt(' ', mətn))  

100 INF İnformatika

213 MAT Riyaziyyatı  

156 ENG İngilis dili

Normal ifadə qrupları hansılardır?

Normal ifadələr qruplarının köməyi ilə biz istədiyimiz obyektləri bir sətirdə deyil, ayrı-ayrı elementlər şəklində əldə edə bilərik. 

Tutaq ki, kursun nömrəsini, kodunu və adını bir sətirdə deyil, ayrıca elementlər kimi almalıyıq. Tapşırığı yerinə yetirmək üçün çoxlu sayda lazımsız kod sətirləri yazmalısınız. 

Əslində, tapşırıq çox sadələşdirilə bilər. Siz bütün qeydlər üçün şablon tərtib edə və sadəcə mötərizədə əldə etməli olduğunuz məlumatları göstərə bilərsiniz.

Çox az sayda xətlər olacaq. 

# kurs mətn şablonları qrupları yaradın və onları çıxarın

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

>>> re.findall(kurs_naxışı, mətn)  

[('100', 'INF', 'Kompüter Elmləri'), ('213', 'MAT', 'Riyaziyyat'), ('156', 'ENG', 'İngilis dili')]

"Amac" uyğunluğu anlayışı

Standart olaraq, müntəzəm ifadələr uyğun gələn məlumatların maksimum miqdarını çıxarmaq üçün proqramlaşdırılmışdır. Və hətta daha az ehtiyacınız olsa belə.

Etiketi əldə etməmiz lazım olan nümunə HTML koduna baxaq.

>>> text = “Acgözlü Normal İfadə Uyğunluğu nümunəsi”  

>>> re.findall('', mətn)  

['Adamlı Normal İfadə Uyğunluğu nümunəsi']

Yalnız bir teq çıxarmaq əvəzinə, Python bütün simli əldə etdi. Buna görə də buna xəsislik deyilir.

Və yalnız etiketi əldə etmək üçün nə etməli? Bu vəziyyətdə, tənbəl uyğunluqdan istifadə etməlisiniz. Belə bir ifadəni təyin etmək üçün nümunənin sonuna sual işarəsi əlavə olunur.

Aşağıdakı kodu və tərcüməçinin çıxışını alacaqsınız.

>>> re.findall('', mətn)  

[”, ”]

Yalnız ilk rast gəlinən hadisəni almaq tələb olunursa, o zaman metoddan istifadə edilir axtar ().

re.search('', text).group()  

"

Sonra yalnız açılış etiketi tapılacaq.

Populyar ifadə şablonları

Budur ən çox istifadə olunan müntəzəm ifadə nümunələri olan cədvəl.

Python 3 üçün Re modulu üçün sənədlər. Normal ifadələr üçün Re modulu

Nəticə

Biz müntəzəm ifadələrlə işləmək üçün yalnız ən əsas üsulları nəzərdən keçirdik. Hər halda onların nə qədər vacib olduğunu görmüsünüz. Və burada bütün mətni və ya onun ayrı-ayrı fraqmentlərini təhlil etmək lazım olub-olmaması, sosial şəbəkədəki yazının təhlili və ya sonradan emal etmək üçün məlumat toplamaq lazım olub-olmamasının fərqi yoxdur. Daimi ifadələr bu məsələdə etibarlı köməkçidir.

Onlar sizə aşağıdakı kimi vəzifələri yerinə yetirməyə imkan verir:

  1. E-poçt ünvanı və ya telefon nömrəsi kimi məlumatların formatının müəyyən edilməsi.
  2. Bir sətir əldə etmək və onu bir neçə kiçik sətirə bölmək.
  3. Mətnlə müxtəlif əməliyyatları yerinə yetirin, məsələn, axtarış, lazımi məlumatları çıxarmaq və ya simvolların bir hissəsini əvəz etmək.

Daimi ifadələr həm də qeyri-trivial əməliyyatları yerinə yetirməyə imkan verir. İlk baxışdan bu elmə yiyələnmək asan deyil. Amma praktikada hər şey standartlaşdırılıb, ona görə də bunu bir dəfə başa düşmək kifayətdir, bundan sonra bu aləti təkcə Python-da deyil, həm də istənilən digər proqramlaşdırma dilində istifadə etmək olar. Hətta Excel məlumatların işlənməsini avtomatlaşdırmaq üçün müntəzəm ifadələrdən istifadə edir. Ona görə də bu alətdən istifadə etməmək günahdır.

Cavab yaz