Python да регуляр ифодалар учун байроқлар
Байроқларни регуляр ифодалар билан ишлайдиган методлар учун мажбурий бўлмаган параметр сифатида белгилаш учун куйидаги синтаксис ишлатилади:
flags=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 байроқ ёрдамида
белгилар регистрини инкор қилиш мумкин. Бу қандай амалга оширилишини кўрамиз. Бу мисолда
регуляр фақат кичик ҳарфларни топади:
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)
Бажарилган код натижаси:
'!!!!!!!'
Мисол
Параметрда бир нечта байроқни ҳам ўтказish мумкин,
уларнинг ўртасига + операторини қўйиб.
Аввал '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)
Бажарилган код натижаси:
'''
!
!
!
'''