Python 3 uchun Re moduli uchun hujjatlar. Muntazam ifodalar uchun Re moduli

Muntazam ifodalar deyarli har qanday dasturlash tilining juda mashhur komponentidir. Ular sizga kerakli ma'lumotlarni tezda olishingizga yordam beradi. Xususan, ular matnni qayta ishlash zarur bo'lganda qo'llaniladi. Python sukut bo'yicha maxsus modul bilan birga keladi. re, bu muntazam iboralar bilan ishlash uchun javobgardir.

Bugun biz umuman nima, ular bilan qanday ishlash va modul haqida batafsil gaplashamiz re yordam beradi.

Muntazam iboralar: kirish

Muntazam iboralar qanday qo'llaniladi? Deyarli hammasi. Masalan, bular:

  1. Matnni tekshirishni talab qiluvchi veb-ilovalar. Oddiy misol - onlayn pochta mijozlari.
  2. Matnlar, ma'lumotlar bazalari va boshqalar bilan bog'liq har qanday boshqa loyihalar.

Sintaksisni tahlil qilishni boshlashdan oldin, biz kutubxona faoliyatining asosiy tamoyillarini batafsilroq tushunishimiz kerak. re va umuman olganda, bu haqda nima yaxshi. Shuningdek, biz haqiqiy amaliyotdan misollar keltiramiz, bu erda biz ulardan foydalanish mexanizmini tasvirlaymiz. Siz matn bilan turli xil operatsiyalarni bajarishingiz uchun mos keladigan bunday shablonni yaratishingiz mumkin.

Re kutubxonasidagi shablon nima?

Uning yordamida siz boshqa funktsiyalarni moslashtirish uchun har xil turdagi ma'lumotlarni qidirishingiz, ularga mos keladigan ma'lumotlarni olishingiz mumkin. Va, albatta, bu ma'lumotlarni qayta ishlash uchun.

Masalan, quyidagi shablonni oling: s+. Bu har qanday bo'shliq belgisini anglatadi. Agar siz unga ortiqcha belgisi qo'shsangiz, bu naqsh bir nechta bo'shliqni o'z ichiga oladi. U hatto chaqirilgan yorliq belgilarga ham mos kelishi mumkin t+.

Ularni ishlatishdan oldin kutubxonani import qilishingiz kerak Re. Shundan so'ng, shablonni kompilyatsiya qilish uchun maxsus buyruqdan foydalanamiz. Bu ikki bosqichda amalga oshiriladi.

>>> import qayta

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

Xususan, ushbu kod foydalanish mumkin bo'lgan shablonni kompilyatsiya qilish operatsiyasini bajaradi. masalan, bo'shliqlarni qidirish uchun (bir yoki bir nechta).

Muntazam iboralar yordamida turli qatorlardan alohida ma'lumot olish

Aytaylik, bizda quyidagi ma'lumotlarni o'z ichiga olgan o'zgaruvchi bor.

>>> matn = “””100 INF Informatika

213 MAT Matematika  

156 ENG Ingliz tili»»»

U uchta o'quv kursini o'z ichiga oladi. Ularning har biri uch qismdan iborat - raqam, kod va nom. Bu so‘zlar orasidagi interval turlicha ekanligini ko‘ramiz. Ushbu qatorni alohida raqamlar va so'zlarga ajratish uchun nima qilish kerak? Ushbu maqsadga erishish uchun ikkita usul mavjud:

  1. funktsiyani chaqirish re.split.
  2. funktsiyasini qo'llash Split uchun regex.

Bizning o'zgaruvchimiz uchun usullarning har birining sintaksisidan foydalanishga misol.

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

# yoki

>>> regex.split(matn)

Natija: ['100', 'INF', 'Informatika', '213', 'MAT', 'Matematik', '156', 'ENG', 'Ingliz tili']

Umuman olganda, ikkala usul ham qo'llanilishi mumkin. Ammo funktsiyani bir necha marta ishlatish o'rniga oddiy iborani ishlatish ancha oson. re.split.

Uchta funksiyali mosliklarni topish

Aytaylik, biz satrdan faqat raqamlarni chiqarishimiz kerak. Buning uchun nima qilish kerak?

re.findall()

Bu erda funktsiya uchun foydalanish holati findall(), bu oddiy iboralar bilan birgalikda matn o'zgaruvchisidan bir yoki bir nechta raqamlarning takrorlanishini ajratib olish imkonini beradi.

>>> chop etish (matn)  

100 INF Informatika

213 MAT Matematika  

156 ENG Ingliz tili

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

>>> regex_num.findall(matn)  

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

d belgisi bilan birgalikda biz o'zgaruvchi yoki matnda joylashgan har qanday raqamli qiymatni ko'rsatadigan shablonni ishlatdik. Va u erga bitta + qo'shganimiz sababli, bu kamida bitta raqam bo'lishi kerakligini anglatadi. 

Moslikni topish uchun raqam mavjudligi shart emasligini belgilash uchun * belgisidan ham foydalanishingiz mumkin.

Ammo bizning holatlarimizda, biz + dan foydalanganimiz uchun, biz bilan ajratib oldik findall() Matndagi kurslarning 1 yoki undan ortiq raqamli belgilari. Shunday qilib, bizning holatlarimizda muntazam iboralar funksiya uchun sozlash vazifasini bajaradi.

re.search() va boshqalar re.match()

Funktsiyalar nomidan taxmin qilganingizdek, birinchi bo'lib matndagi moslikni qidiradi. Savol: O'rtasidagi farq nima findall? Gap shundaki, u avvalgi funksiya kabi roʻyxat koʻrinishidagi topilgan natijalarning butun ketma-ketligini emas, balki naqshga mos keladigan aniq obʼyektni qaytaradi.

O'z navbatida, re.match funksiyasi ham xuddi shunday qiladi. Faqat sintaksis boshqacha. Shablon boshida joylashtirilishi kerak. 

Buni isbotlovchi bir misol keltiraylik.

>>> # matn bilan o'zgaruvchi yarating

>>> text2 = «»»INF Informatika

213 MAT Matematika 156″»»  

>>> # regexni kompilyatsiya qiling va naqshlarni qidiring

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

>>> s = regex_num.search(matn2)  

>>> print('Birinchi indeks: ', s.start())  

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

>>> chop etish (matn2[s.start():s.end()]) 

Birinchi indeks: 17 

Oxirgi indeks: 20

213

Agar shunga o'xshash natijani boshqa yo'l bilan olishni istasangiz, funksiyadan foydalanishingiz mumkin group().

Matnning bir qismini Re kutubxonasi bilan almashtirish

Matnni almashtirish uchun funksiyadan foydalaning re.sub(). Aytaylik, bizning kurslarimiz ro'yxati biroz o'zgardi. Har bir raqamli qiymatdan keyin bizda yorliq borligini ko'ramiz. Bizning vazifamiz bu ketma-ketlikning barchasini bir qatorga birlashtirishdir. Buning uchun s+ ifodasini almashtirishimiz kerak o'tish uchun 

Asl matn quyidagicha edi:

# matn bilan o'zgaruvchi yarating

>>> matn = “””100 INF t Informatika

213 MAT t Matematika  

156 ENG t Ingliz tili»»»  

>>> chop etish (matn)  

100 ma'lumot Informatika

213 XNUMX XNUMX XNUMX MAT matematika  

156 ANG Ingliz Tili

Istalgan operatsiyani bajarish uchun biz quyidagi kod qatorlaridan foydalandik.

# bir yoki bir nechta bo'shliqni 1 bilan almashtiring

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

>>> chop etish (regex.sub(' ', matn))  

Natijada bizda bitta chiziq bor. 

101 COM Kompyuterlar 205 MAT Matematika 189 ENG Ingliz tili

Endi boshqa muammoni ko'rib chiqing. Biz bo'shliqlarni qo'yish vazifasiga duch kelmayapmiz. Biz uchun barcha kurs nomlari yangi qatordan boshlanishi muhimroq. Buning uchun istisnoga yangi qator qo'shadigan boshqa ifoda ishlatiladi. Bu qanday ifoda?

Kutubxona Re salbiy moslik kabi xususiyatni qo'llab-quvvatlaydi. U to'g'ridan-to'g'ridan farq qiladi, chunki unda qiyshiq chiziqdan oldin undov belgisi mavjud. Ya'ni, agar yangi qator belgisini o'tkazib yuborish kerak bo'lsa, u holda n o'rniga !n yozish kerak.

Biz quyidagi kodni olamiz.

# yangi qatordan tashqari barcha bo'shliqlarni olib tashlang  

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

>>> chop etish (regex.sub(' ', matn))  

100 INF Informatika

213 MAT Matematika  

156 ENG Ingliz tili

Muntazam ifoda guruhlari nima?

Muntazam iboralar guruhlari yordamida biz kerakli ob'ektlarni bir qatorda emas, balki alohida elementlar shaklida olishimiz mumkin. 

Aytaylik, biz kurs raqamini, kodini va nomini bir qatorda emas, balki alohida elementlar sifatida olishimiz kerak. Vazifani bajarish uchun siz juda ko'p keraksiz kod satrlarini yozishingiz kerak bo'ladi. 

Aslida, vazifani juda soddalashtirish mumkin. Siz barcha yozuvlar uchun shablonni kompilyatsiya qilishingiz va faqat qavslardan olishingiz kerak bo'lgan ma'lumotlarni ko'rsatishingiz mumkin.

Juda oz sonli qatorlar bo'ladi. 

# kurs matni shablonlari guruhlarini yarating va ularni ajratib oling

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

>>> re.findall (kurs_naqli, matn)  

[('100', 'INF', 'Informatika'), ('213', 'MAT', 'Matematik'), ('156', 'ENG', 'Ingliz tili')]

"Ochko'z" taalukli tushunchasi

Standartga ko'ra, muntazam ifodalar mos keladigan ma'lumotlarning maksimal miqdorini olish uchun dasturlashtirilgan. Va agar sizga kamroq kerak bo'lsa ham.

Keling, tegni olishimiz kerak bo'lgan namunaviy HTML kodini ko'rib chiqaylik.

>>> text = "Ochko'zlik bilan muntazam ifodalarni moslashtirish misoli"  

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

['Ochko'zlik bilan muntazam ifodalarni moslashtirish misoli']

Faqat bitta tegni chiqarish o'rniga, Python butun satrni oldi. Shuning uchun uni ochko'zlik deb atashadi.

Va faqat tegni olish uchun nima qilish kerak? Bunday holda, siz dangasa moslashuvdan foydalanishingiz kerak. Bunday ifodani belgilash uchun naqsh oxiriga savol belgisi qo'yiladi.

Siz quyidagi kodni va tarjimonning chiqishini olasiz.

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

[”, ”]

Agar faqat birinchi duch kelgan hodisani olish kerak bo'lsa, u holda usul qo'llaniladi qidirmoq ().

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

"

Keyin faqat ochilish yorlig'i topiladi.

Mashhur ifoda shablonlari

Bu erda eng ko'p ishlatiladigan muntazam ifoda naqshlarini o'z ichiga olgan jadval mavjud.

Python 3 uchun Re moduli uchun hujjatlar. Muntazam ifodalar uchun Re moduli

Xulosa

Biz oddiy iboralar bilan ishlashning faqat eng asosiy usullarini ko'rib chiqdik. Har holda, ular qanchalik muhimligini ko'rdingiz. Va bu erda butun matnni yoki uning alohida qismlarini tahlil qilish kerakmi, ijtimoiy tarmoqdagi postni tahlil qilish yoki uni keyinchalik qayta ishlash uchun ma'lumot to'plash kerakmi, farq qilmaydi. Muntazam iboralar bu masalada ishonchli yordamchidir.

Ular sizga quyidagi vazifalarni bajarishga imkon beradi:

  1. Elektron pochta manzili yoki telefon raqami kabi ma'lumotlar formatini belgilash.
  2. Satrni olish va uni bir nechta kichikroq satrlarga bo'lish.
  3. Matn bilan turli operatsiyalarni bajaring, masalan, qidirish, kerakli ma'lumotlarni ajratib olish yoki belgilarning bir qismini almashtirish.

Muntazam iboralar ham ahamiyatsiz operatsiyalarni bajarishga imkon beradi. Bir qarashda bu fanni egallash oson emas. Ammo amalda hamma narsa standartlashtirilgan, shuning uchun uni bir marta aniqlash kifoya, shundan so'ng bu vositadan nafaqat Pythonda, balki boshqa istalgan dasturlash tilida ham foydalanish mumkin. Hatto Excel ham ma'lumotlarni qayta ishlashni avtomatlashtirish uchun oddiy iboralardan foydalanadi. Shuning uchun bu vositadan foydalanmaslik gunohdir.

Leave a Reply