რეგულარული გამონათქვამების დროშები 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)
შესრულებული კოდის შედეგი:
'''
!
!
!
'''