Python dagi muntazam ifodalar uchun bayroqlar
Muntazam ifodalar bilan ishlaydigan metodlar uchun majburiy bo‘lmagan parametr sifatida bayroqlarni belgilash uchun quyidagi sintaksisdan foydalaniladi:
flags=re.bayroq_nomi
Muntazam ifodalar bilan ishlash uchun asosiy bayroqlar
| Bayroq | Vazifasi |
|---|---|
re.IGNORECASE |
Belgilarning yozilish registrini hisobga olmaslik. |
re.DOTALL |
Nuqta har qanday belgini, shu jumladan satr o‘tishini ham ifodalaydi. |
re.I |
Qidiruvni registrga sezgir bo‘lmasligini ta'minlaydi. |
re.L |
So‘zlarni joriy tilga mos ravishda qidiradi.
Bu talqin alifbo guruhiga (\w va \W), shuningdek
so‘z chegarasi xatti-harakatiga (\b va
\B) ta'sir qiladi.
|
re.M |
$ belgisi matnning har qanday satrining oxirida qidiruvni amalga oshiradi
(nafaqat matn oxirida) va ^ belgisi matnning har qanday satrining boshida
qidiruvni amalga oshiradi (nafaqat matn boshida).
|
re.S |
Nuqta (.) qiymatini yangi satrni o‘z ichiga olgan
har qanday belgiga mos keladigan qilib o‘zgartiradi.
|
re.U |
Harflarni Unicode belgilar to‘plamiga mos ravishda talqin qiladi.
Ushbu bayroq \w, \W, \b,
\B xatti-harakatiga ta'sir qiladi. Pythonda 3+ ushbu bayroq
standart sifatida o‘rnatilgan.
|
re.X |
Ko‘p qatorli muntazam ifoda sintaksisiga imkon beradi.
U naqsh ichidagi bo‘shliqlarni e‘tiborsiz qoldiradi
([] to‘plami ichidagi bo‘shliqlar yoki
teskari chiziq bilan ekranlangan bo‘shliqlardan tashqari) va
ekranlanmagan '#' ni sharh sifatida ishlaydi.
|
Misol
re.IGNORECASE bayrog‘i yordamida
belgilar registrini hisobga olmaslik mumkin. Keling,
buni qanday amalga oshirilishini ko‘rib chiqaylik. Ushbu misolda
muntazam ifoda faqat kichik harflarni topadi:
txt = 'aaa bbb CCC DDD'
res = re.sub('[a-z]+', '!', txt)
print(res)
Kodni bajarish natijasi:
'! ! CCC DDD'
Misol
Endi esa metodning to‘rtinchi parametriga
re.IGNORECASE bayrog‘ini qo‘shamiz va muntazam ifoda
barcha registrlardagi belgilarni qidira boshlaydi:
txt = 'aaa AAA bbb BBB'
res = re.sub('[a-z]+', '!', txt, flags=re.IGNORECASE)
print(res)
Kodni bajarish natijasi:
'! ! ! !'
Misol
Keling, muntazam ifoda yordamida barcha satr o‘tishlarini topamiz:
txt = '''aaa
bbb'''
res = re.sub('\n', '!', txt)
print(res)
Bajarilgan kod natijasi:
'aaa!bbb'
Misol
Lekin, agar barcha belgilarni almashtirish kerak bo‘lsa, muntazam ifodada nuqta qo‘yilsa, satr o‘tishlari o‘z ichiga olinmaydi:
txt = '''aaa
bbb'''
res = re.sub('.', '!', txt)
print(res)
Bajarilgan kod natijasi:
'!!!
!!!'
Misol
Ushbu xatoni tuzatish uchun
re.DOTALL bayrog‘ini qo‘llash kerak:
res = re.sub('.', '!', txt, flags=re.DOTALL)
print(res)
Bajarilgan kod natijasi:
'!!!!!!!'
Misol
Parametrga bir nechta bayroq ham uzatish mumkin,
ular orasiga + operatorini qo‘ygan holda.
Keling, avval satr oxiridagi 'a' harfini almashtiramiz:
txt = '''
aaa
AAA
aaa'''
res = re.sub('aaa$', '!', txt)
print(res)
Bajarilgan kod natijasi:
'''
aaa
AAA
!
'''
Misol
Endi re.M bayrog‘ini qo‘yamiz:
res = re.sub('aaa$', '!', txt, flags=re.M)
print(res)
Bajarilgan kod natijasi:
'''
!
AAA
!
'''
Misol
Keling, endi registrni hisobga olmaslik uchun bayroqni ham qo‘llaymiz:
res = re.sub('aaa$', '!', txt, flags=re.M+re.IGNORECASE)
print(res)
Bajarilgan kod natijasi:
'''
!
!
!
'''