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)
Иштетилген коддун натыйжасы:
'''
!
!
!
'''