სპეციალური სიმბოლოების ეკრანირება Python-ის რეგულარულ გამონათქვამებში
დავუშვათ, რომ საჭიროა, რომ სპეციალურმა სიმბოლომ თავისი თავი აღნიშნოს. ამისთვის მისი ეკრანირება უნდა მოხდეს უკანა წერტილის გამოყენებით. მოდით შევხედოთ მაგალითებს.
მაგალითი
შემდეგ მაგალითში რეგულარული გამონათქვამის ავტორს სურდა,
რომ ძიების შაბლონი ასე გამოეყურებინა: ასო
'a', შემდეგ პლუსი '+', შემდეგ
ასო 'x'. თუმცა, კოდის ავტორმა
არ დაეკრანა სიმბოლო '+' და ამიტომ
ძიების შაბლონი რეალურად ასე გამოიყურება:
ასო 'a' ერთი ან მეტჯერ,
შემდეგ ასო 'x':
txt = 'a+x ax aax aaax'
res = re.sub('a+x', '!', txt)
print(res)
კოდის შესრულების შედეგი:
'a+x ! ! !'
მაგალითი
ახლა კი ავტორმა დაეკრანა პლუსი უკანა
წერტილით. ახლა ძიების შაბლონი ისე გამოიყურება,
როგორც საჭიროა: ასო 'a', შემდეგ პლუსი
'+', შემდეგ ასო 'x':
txt = 'a+x ax aax aaax'
res = re.sub('a\+x', '!', txt)
print(res)
კოდის შესრულების შედეგი:
'! ax aax aaax'
მაგალითი
ამ მაგალითში შაბლონი ასე გამოიყურება:
ასო 'a', შემდეგ წერტილი '.',
შემდეგ ასო 'x':
txt = 'a.x abx azx'
res = re.sub('a\.x', '!', txt)
print(res)
კოდის შესრულების შედეგი:
'! abx azx'
მაგალითი
შემდეგ მაგალითში ავტორმა დაივიწყა წერტილის ეკრანირება და რეგულარულმა გამონათქვამმა მოიცვა ყველა ქვესტრიქონი, რადგან დაუკრანავი წერტილი აღნიშნავს ნებისმიერ სიმბოლოს:
txt = 'a.x abx azx'
res = re.sub('a.x', '!', txt)
print(res)
კოდის შესრულების შედეგი:
'! ! !'
შენიშვნა
ყურადღება მიაქციეთ იმას, რომ თუ თქვენ დაგავიწყდებათ წერტილისთვის უკანა წერტილის დაწერა (როდესაც მან თავისი თავი უნდა აღნიშნოს) - ამის შემჩნევაც კი შეიძლება არ მოხდეს:
res = re.sub('a.x', '!', 'a.x')
print(res) # დააბრუნებს '!', როგორც ჩვენ გვსურდა
ვიზუალურად მუშაობს სწორად (რადგან წერტილი
ნებისმიერ სიმბოლოს აღნიშნავს, მათ შორის
ჩვეულებრივ წერტილს '.'). მაგრამ თუ შევცვლით
სტრიქონს, რომელშიც ჩანაცვლება ხდება - ჩვენ
შევნიშნავთ ჩვენს შეცდომას:
res = re.sub('a.x', '!', 'a.x abx azx')
print(res) # დააბრუნებს '! ! !', მოსალოდნელი იყო '! abx azx'
სპეციალური და ჩვეულებრივი სიმბოლოების სია
თუ ჩვეულებრივ სიმბოლოს დავეკრანებთ - არაფერი საშინელი არ მოხდება - ის მაინც საკუთარ თავს აღნიშნავს. გამონაკლისი - ციფრები, მათი ეკრანირება არ შეიძლება.
ხშირად ჩნდება ეჭვი, არის თუ არა მოცემული სიმბოლო სპეციალური. ზოგიერთი იმ დონემდე აღწევს, რომ ყველა ეჭვიან სიმბოლოს ზედიზედ ეკრანირებს. თუმცა, ეს ცუდი პრაქტიკაა (აბინძურებს რეგულარულ გამონათქვამებს უკანა წერტილებით).
სპეციალური სიმბოლოებია: $ ^ . * + ? \ / {} [] () |
არ არის სპეციალური სიმბოლოები: @ : , ' " - _ = < > % # ~ `& !
პრაქტიკული ამოცანები
მოცემულია სტრიქონი:
txt = 'a.a aba aea'
დაწერეთ რეგულარული გამონათქვამი, რომელიც იპოვის სტრიქონს
'a.a', სხვები არ დაიჭიროს.
მოცემულია სტრიქონი:
txt = '2+3 223 2223'
დაწერეთ რეგულარული გამონათქვამი, რომელიც იპოვის სტრიქონს
'2+3', სხვები არ დაიჭიროს.
მოცემულია სტრიქონი:
txt = '23 2+3 2++3 2+++3 345 567'
დაწერეთ რეგულარული გამონათქვამი, რომელიც იპოვის სტრიქონებს
'2+3', '2++3', '2+++3',
სხვები არ დაიჭიროს (+ შეიძლება იყოს ნებისმიერი
რაოდენობის).
მოცემულია სტრიქონი:
txt = '23 2+3 2++3 2+++3 445 677'
დაწერეთ რეგულარული გამონათქვამი, რომელიც იპოვის სტრიქონებს
'23', '2+3', '2++3',
'2+++3', სხვები არ დაიჭიროს.
მოცემულია სტრიქონი:
txt = '*+ *q+ *qq+ *qqq+ *qqq qqq+'
დაწერეთ რეგულარული გამონათქვამი, რომელიც იპოვის სტრიქონებს
'*q+', '*qq+', '*qqq+',
სხვები არ დაიჭიროს.
მოცემულია სტრიქონი:
txt = '[abc] {abc} abc (abc) [abc]'
დაწერეთ რეგულარული გამონათქვამი, რომელიც იპოვის სტრიქონებს
კვადრატულ ფრჩხილებში და შეცვლის მათ
'!'-ით.