Флагҳо барои сатрҳои регулярони дар Python

Барои таъин кардани флагҳо ҳамчун яке аз параметрҳои ихтиёрӣ барои усулҳое, ки бо регулярҳо кор мекунанд, синтаксиси зерин истифода мешавад:

pythonflags=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 метавон регистри аломатҳоро нодида гирифт. Биёед бубинем, ки ин чӣ гуна анҷом дода мешавад. Дар ин намуна регулярка танҳо ҳарфҳои хурдро меёбад:

pythontxt = 'aaa bbb CCC DDD'
res = re.sub('[a-z]+', '!', txt)

print(res)

Натиҷаи иҷрои рамз:

python'! ! CCC DDD'

Намуна

Ва ҳоло флаги re.IGNORECASE-ро ба параметри чорум аз усул илова кунем ва регулярка аломатҳоро дар ҳама регистрҳо ҷустуҷӯ карданро оғоз мекунад:

pythontxt = 'aaa AAA bbb BBB'
res = re.sub('[a-z]+', '!', txt, flags=re.IGNORECASE)

print(res)

Натиҷаи иҷрои рамз:

python'! ! ! !'

Намуна

Биёед ҳамаи гузаришҳои сатрро бо регулярка ёбем:

pythontxt = '''aaa
  bbb'''
res = re.sub('\n', '!', txt)

print(res)

Натиҷаи рамзи иҷрошуда:

python'aaa!bbb'

Намуна

Аммо, агар ба таври умумӣ ҳамаи аломатҳоро иваз кардан лозим бошад, ҳангоми гузоштани нуқта дар регулярка, гузаришҳои сатр ба даст нахоҳанд омад:

pythontxt = '''aaa
  bbb'''
res = re.sub('.', '!', txt)

print(res)

Натиҷаи рамзи иҷрошуда:

python'!!!
!!!'

Намуна

Барои ислоҳ кардани ин хато, бояд флаги re.DOTALL истифода шавад:

pythonres = re.sub('.', '!', txt, flags=re.DOTALL)
print(res)

Натиҷаи рамзи иҷрошуда:

python'!!!!!!!'

Намуна

Дар параметр метавон якчанд флагҳоро низ фиристод, бо гузоштани амалгари + байни онҳо. Биёед аввал ҳарфи 'a' дар охири сатрро иваз кунем:

pythontxt = '''
  aaa
  AAA
  aaa'''
res = re.sub('aaa$', '!', txt)

print(res)

Натиҷаи рамзи иҷрошуда:

python'''
  aaa
  AAA
  !
'''

Намуна

Ҳоло флаги re.M мегузорем:

pythonres = re.sub('aaa$', '!', txt, flags=re.M)
print(res)

Натиҷаи рамзи иҷрошуда:

python'''
  !
  AAA
  !
'''

Намуна

Биёед ҳоло флагро барои нодида гирифтан аз регистр низ истифода барем:

pythonres = re.sub('aaa$', '!', txt, flags=re.M+re.IGNORECASE)
print(res)

Натиҷаи рамзи иҷрошуда:

python'''
  !
  !
  !
'''