Պայթոնում ռեգուլյար արտահայտությունների տողերի դրոշներ
Մեթոդներին, որոնք աշխատում են ռեգուլյար արտահայտությունների հետ, դրոշները որպես ընտրովի պարամետր նշելու համար օգտագործվում է հետևյալ շարահյուսությունը.
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)
Կատարված կոդի արդյունքը.
'''
!
!
!
'''