1.4-§. RegEx - ANDOZA YORDAMIDA MATN IZLASH
Pythondagi juda foydali modullardan biri bu re (regular expressions) moduli. Bu modul yordamida biror matn berilgan andozaga tushish, tushmalsigini tekshrib ko'rishimiz mumkin. Yoki berilgan andoza asosida matnlar orasidan kerakli matnlarni ajratib olish mumkin.
Keling boshlanishiga sodda misol ko'ramiz. Quyida biz 3 ta so'z va so'zlarni tekshirish uchun andoza yaratdik. Quyidagi andozamiz т harfidan boshlanuvchi (^т), р harfiga tugovchi (р$), 5 harfdan iborat so'zlarni qidiradi (^т...р$).
Avvaliga andozalarni tushunish biroz qiyin bo'lishi mumkin, lekin vaqt o'tishi bilan andoza qanday ishlashini tushunib olasiz deb umid qilamiz.
So'zlarni andozaga solishtirish uchun re.match() funksiyasidan foydalanamiz. Agar tekshirgan so'zimiz andozaga mosh tushsa, re.match() metodi so'zni o'zini qaytaradi, aks holda None qiymatini qaytaradi.
1
import re
2
3
word1 = "темир"
4
word2 = "томир"
5
word3 = "тулпор"
6
7
andoza = "^т...р"
8
9
print(re.match(andoza, word1))
10
print(re.match(andoza, word2))
11
print(re.match(andoza, word3))
Copied!
Natija:
1
2
3
None
Copied!
Natijadan ko'rishimiz mumkin, word1 va word2 o'zgaruvchilari anfozaga tushdi, word3 esa tushmadi.
Keling endi, so'z to'pish o'yinida ishlatilgan soz'lar ro'yxatidan foydalanamiz, va ro'yxatdan biz bergan andozaga tushuvchi so'zlarni ajratib olamiz.
1
from uzwords import words
2
andoza = "^т...р$"
3
4
matches = []
5
for word in words:
6
if re.match(andoza,word):
7
matches.append(word)
8
print(matches)
Copied!
Natija:
1
['табар', 'табор', 'тавир', 'тайёр', 'татар', 'татир', 'тахир', 'тақир', 'театр', 'тембр', 'темир', 'темур', 'тенор', 'тикер', 'тихир', 'товар', 'товор', 'тожир', 'томир', 'тонер', 'тоҳир', 'триер', 'тумор', 'тўпар', 'тўпир']
Copied!
Andozalar biror matnda biz uchun kerakli maʻlumotlarni ajratib olish uchun juda qulay. Masalan, Telegram orqali yuborilgan habardan email manzilini yoki telefon raqamini ajratib olish uchun maxsus andoza yozishmiz mumkin. ihateregex.io sahifasidan esa loyihangiz uchun tayyor andozalarni topishingiz mumkin.
ihateregex.io sahifasida email uchun andoza
Keling, yuqoridagi andoza asosida biror matndan email manzilini ajratib olamiz. Buning uchun re.findall() funksiyasidan foydalanamiz.
1
matn = """Maqolalar 2020-yilning 20-martiga qadar rtmkonferensiya2021@mail.ru elektron pochtasida qabul qilinadi.
2
Quyidagi yo'nalishdagi maqolalar qabul qilinadi:
3
👉 Aniq va tabiiy fanlarni zamonaviy pedagogik texnologiyalar asosida o‘qitish metodikasi.
4
👉 Umumta’lim fanlarini o‘qitishda STEAM yondashuvning o’rni va ahamiyati. """
5
6
andoza = '[^@ \t\r\n]+@[^@ \t\r\n]+\.[^@ \t\r\n]+'
7
email = re.findall(andoza,matn)
8
print(email)
Copied!
Natija: ['rtmkonferensiya2021@mail.ru']
Andoza yordamida foydalanuvchi kiritgan qiymatlarni ham ma'lum shartlarga javob berishini tekshirib olishimiz mumkin:
1
# Kuchli parolni tekshirish
2
# Quyidagi andoza ham ihateregex.io sahifasidan olindi
3
andoza = '^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@$ %^&*-]).{8,}$'
4
msg = "Yangi parol kiriting"
5
msg += '(kamida 8 belgidan iborat, kamida 1 ta lotin bosh harf, 1 ta kichik harf, '
6
msg += '1 ta son va 1 ta maxsus belgi boʻlishi kerak): '
7
8
while True:
9
password = input(msg)
10
if re.match(andoza,password):
11
print("Maxfiy so'z qabul qilindi")
12
break
13
else:
14
print("Maxfiy so'z talabga javob bermadi")
Copied!
RegEx juda katta mavzu boʻlgani uchun, kelajakda bu haqida alohida dars qilamiz.
Do'stlaringiz bilan baham: |