Флагҳо барои сатрҳои регулярони дар Python
Барои таъин кардани флагҳо ҳамчун яке аз параметрҳои ихтиёрӣ барои усулҳое, ки бо регулярҳо кор мекунанд, синтаксиси зерин истифода мешавад:
flags=re.номи флаг
Флагҳои асосӣ барои кор бо регулярон
| Флаг | Мақсад |
|---|---|
re.IGNORECASE |
Нодида гирифтан аз регистри навиштани аломатҳо. |
re.DOTALL |
Нуқта ҳар як аломатро ифода мекунад, аз ҷумла гузариши сатр. |
re.I |
Ҷустуҷӯро нозукназар ба регистр мегардонад. |
re.L |
Калимаҳоро мувофиқи забони ҷорӣ меҷӯяд.
Ин тафсир гурӯҳи алифборо таъсир мерасонад
(\w ва \W), инчунин
рафтори сарҳади калима (\b ва
\B).
|
re.M |
Аломати $ ҷустуҷӯро дар охири
ҳар як сатр аз матн (на танҳо охири матн)
иҷро мекунад ва аломати ^ ҷустуҷӯро дар оғози
ҳар як сатр аз матн (на танҳо дар оғози
матн) иҷро мекунад.
|
re.S |
Қимати нуқта (.)-ро ба
мос бо ҳар як аломат, аз ҷумла сатри
нав, тағйир медиҳад.
|
re.U |
Ҳарфҳоро мувофиқи
маҷмӯи аломатҳои Unicode тафсир мекунад. Ин флаг таъсир мерасонад
ба рафтори \w, \W, \b,
\B. Дар Python 3+ ин флаг
ба таври пешфарз таъин шудааст.
|
re.X |
Синтаксиси чандсатрии ифодаи
оддӣ имкон медиҳад. Он фосилаҳои даруни
шаклро нодида мегирад (ба истиснои фосилаҳои даруни
маҷмӯаи [] ва ё вақте, ки бо
кашиши ақиб таъсир намешавад) ва таҳлил мекунад
наэкранирофташудаи '#' ҳамчун тавзеҳ.
|
Намуна
Бо ёрии флаги re.IGNORECASE метавон
регистри аломатҳоро нодида гирифт. Биёед
бубинем, ки ин чӣ гуна анҷом дода мешавад. Дар ин намуна
регулярка танҳо ҳарфҳои хурдро меёбад:
txt = 'aaa bbb CCC DDD'
res = re.sub('[a-z]+', '!', txt)
print(res)
Натиҷаи иҷрои рамз:
'! ! CCC DDD'
Намуна
Ва ҳоло флаги re.IGNORECASE-ро ба параметри чорум аз
усул илова кунем ва регулярка
аломатҳоро дар ҳама регистрҳо ҷустуҷӯ карданро оғоз мекунад:
txt = 'aaa AAA bbb BBB'
res = re.sub('[a-z]+', '!', txt, flags=re.IGNORECASE)
print(res)
Натиҷаи иҷрои рамз:
'! ! ! !'
Намуна
Биёед ҳамаи гузаришҳои сатрро бо регулярка ёбем:
txt = '''aaa
bbb'''
res = re.sub('\n', '!', txt)
print(res)
Натиҷаи рамзи иҷрошуда:
'aaa!bbb'
Намуна
Аммо, агар ба таври умумӣ ҳамаи аломатҳоро иваз кардан лозим бошад, ҳангоми гузоштани нуқта дар регулярка, гузаришҳои сатр ба даст нахоҳанд омад:
txt = '''aaa
bbb'''
res = re.sub('.', '!', txt)
print(res)
Натиҷаи рамзи иҷрошуда:
'!!!
!!!'
Намуна
Барои ислоҳ кардани ин хато, бояд
флаги re.DOTALL истифода шавад:
res = re.sub('.', '!', txt, flags=re.DOTALL)
print(res)
Натиҷаи рамзи иҷрошуда:
'!!!!!!!'
Намуна
Дар параметр метавон якчанд
флагҳоро низ фиристод, бо гузоштани амалгари + байни онҳо.
Биёед аввал ҳарфи 'a'
дар охири сатрро иваз кунем:
txt = '''
aaa
AAA
aaa'''
res = re.sub('aaa$', '!', txt)
print(res)
Натиҷаи рамзи иҷрошуда:
'''
aaa
AAA
!
'''
Намуна
Ҳоло флаги re.M мегузорем:
res = re.sub('aaa$', '!', txt, flags=re.M)
print(res)
Натиҷаи рамзи иҷрошуда:
'''
!
AAA
!
'''
Намуна
Биёед ҳоло флагро барои нодида гирифтан аз регистр низ истифода барем:
res = re.sub('aaa$', '!', txt, flags=re.M+re.IGNORECASE)
print(res)
Натиҷаи рамзи иҷрошуда:
'''
!
!
!
'''