Sunday, August 16, 2015

თავი 11 (11,4 - 11,6)

11.4 Escape character


მას შემდეგ, რაც რეგულარულ გამოსახულებებში ვიყენებთ სპეციალურ სიმბოლოებს ხაზის დასაწყისის დასამთხვევად  ან ხაზის ბოლოს wild cards - ის დასაზუსტებლად, გვჭირდება გზა იმის საჩვენებლად, რომ ეს სიმბოლოები არის „ნორმალური“ და გვინდა დავამთხვიოთ ნამდვილი სიმბოლო, როგორიცაა დოლარის ნიშანი ან caret ნიშანი(^). შეგვიძლია ვაჩვენოთ, რომ  გვინდა მარტივად დავამთხვიოთ სიმბოლო, ამ სიმბოლოსთვის backslash - ის (\) წინდართვით. მაგალითად, მომდევნო რეგულარული გამოსახულებით შეგვიძლია ვიპოვნოთ ფულის რაოდენობა:

import re
x = 'We just received $10.00 for cookies.'
y = re.findall('\$[0-9.]+', x)


მას შემდეგ რაც დოლარის ნიშანს პრეფიქსად backslash დავუწერეთ,  „ხაზის ბოლოს“ ნაცვლად შეტანილ სტრინგში  რეალურად ამთხვევს დოლარის ნიშანს. შენიშვნა: კვადრატულ ფრჩხილებს შორის სიმბოლოები არ არის „სპეციალური“, როცა ვამბობთ
[0 – 9.]“, ეს ნამდვილად ნიშნავს მთელ რიცხვებს ან წერტილს. კვადრატულ ფრჩხილებს გარეთ წერტილი არის „wild-card“ სიმბოლო და ამთხვევს ნებისმიერ სიმბოლოს. კვადრატულ ფრჩხილებში წერტილი არის წერტილი.


11.5 Summary

ვისწავლეთ რეგულარული გამოსახულების ენის მცირე ნაწილი. ესაა სტრინგის ძებნა, რასაც აქვს სპეციალური სიმბოლოები - რითაც კომუნიკაცია ხდება შენ სურვილებსა და რეგულარული გამოსახულების სისტემასთან, რაც აკეთებს „დამთხვევას“ და რაც არის ამოღებული დამთხვეული სტრინგიდან. აქაა ზოგი სპეციალური სიმბოლო და სიმბოლოთა რიგი:

^
ამთხვევს ხაზის დასაწყისს.

$

ამთხვევს ხაზის დასასრულს.

.

ამთხვევს ნებისმიერ სიმბოლოს (a wildcard).

\s

ამთხვევს ჰარის.

\S

ამთხვევს არა-ჰარი სიმბოლოს (\s - ს საწინააღმდეგო)

*
ვრცელდება წინა(preceding) სიმბოლოებზე და აჩვენებს წინამდებარე სიმბოლოების ნულ ან მეტ დამთხვევას „არა-ხარბ მეთოდში.

+

ვრცელდება წინა(preceding) სიმბოლოებზე და აჩვენებს წინამდებარე სიმბოლოების ერთ ან მეტ დამთხვევას.

+?

ვრცელდება წინა(preceding) სიმბოლოებზე და აჩვენებს წინამდებარე სიმბოლოების ერთ ან მეტ დამთხვევას „არა-ხარბ მეთოდში.

[aeiou]

ამთხვევს ერთ სიმბოლოს როცა ეს სიმბოლო მითითებულია. ამ მაგალითში დაემთხვევა
“a”, “e”, “i”, “o” ან “u”, მაგრამ არა სხვა სიმბოლოები.

[a-z0-9]

მინუსის ნიშნის გამოყენებით შეგიძლია მიუთითო სიმბოლოების დიაპაზონი. ეს მაგალითი არის ერთი სიმბოლო, რომელიც უნდა პატარა ასო ან მთელი რიცხვი.

[ˆA-Za-z]

როცა ჩანაწერში პირველია caret სიმბოლო, ეს ლოგიკას აბრუნებს. ეს მაგალითი ამთხვევს ნებისმიერ ასოს.

( )

რეგულარულ გამოსახულებას როცა ფრჩხილები აქვს დამატებული, they are ignored for the purpose of matching,  but allow you to extract a particular subset of the matched string rather than the whole string when using findall().

\b

სიტყვის მხოლოდ დასაწყისში ან დასასრულს ამთხვევს ცარიელ სტრინგს.

\B

ამთხვევს ცარიელ სტრინგს, მაგრამ  არა სიტყვის დასაწყისში ან დასასრულს.

\d

ამთხვევს ნებისმიერ ათობით ციფრს. [0 – 9] - ის ექვივალენტურს.

\D
ამთხვევს ნებისმიერ არა-მთელ რიცხვ სიმბოლოს.  [^ 0 – 9] - ის ექვივალენტურს.
11.6 Bonus section for Unix users


ძებნის ფაილების მხარდაჭერა რეგულარული გამოსახულების გამოყენებით გაკეთებული იქნა UNIX ოპერაციულ სისტემაში 1960 წელს და თითქმის ყველა პროგრამულ ენებში ხელმისაწვდომია რაღაც ფორმით.
UNIX - ში ჩაშენებულია ბრძანებათა ხაზის პროგრამა grep (Generalized Regular Expression Parser), რომელიც აკეთებს დაახლოვებით იგივეს, რასაც search() მაგალითები ამ თავში.
მაკინტოში ან ლინუქსის სისტემა თუ გაქვს შეგიძლია ცადო შემდეგი ბრძანებები ბრძანებათა ხაზში.

$ grep 'ˆFrom:' mbox-short.txt
From: stephen.marquard@uct.ac.za
From: louis@media.berkeley.edu
From: zqian@umich.edu
From: rjlowe@iupui.edu

ეს ეუბნება grep - ს, რომ გაჩვენოს ხაზები, რომელიც იწყება სტრინგით „From:“ ფაილში mbox-short.txt.  grep - ის დოკუმენტაციას თუ წაიკითხავ და ექსპერიმენტებს ჩაატარებ, იპოვნი მცირე განსხვავებას პითონისა და grep - ის რეგულარულ გამოსახულებების მხარდაჭერაში. როგორც მაგალითი  grep - ს არ აქვს არა-ცარიელი სიმბოლოს მხარდაჭერა \S და დაგჭირდება ცოტა უფრო რთული ჩაწერა [ˆ ] - რაც ნიშნავს დაამთხვიე ჰარის გარდა ყველა სიმბოლო.