Python да регуляр ифодалар учун байроқлар

Байроқларни регуляр ифодалар билан ишлайдиган методлар учун мажбурий бўлмаган параметр сифатида белгилаш учун куйидаги синтаксис ишлатилади:

pythonflags=re.байроқ номи

Регуляр ифодалар билан ишлаш учун асосий байроқлар

Байроқ Вазифаси
re.IGNORECASE Белгиларнинг ёзилиш регистрини инкор қилиш.
re.DOTALL Нуқта ҳар қандай белгини, шу жумладан сатр ўтишни ҳам англатади.
re.I Қидирувни регистрга сезимсиз қилади.
re.L Cўзларни жорий тилга мос келадиган холда излайди. Бу интерпретация алфавит гуруҳига (\w ва \W), шунингдек cўз чегарасининг ҳаракатига (\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'!!!!!!!'

Мисол

Параметрда бир нечта байроқни ҳам ўтказish мумкин, уларнинг ўртасига + операторини қўйиб. Аввал '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'''
  !
  !
  !
'''