დოკუმენტაცია Re მოდულისთვის Python 3-ისთვის. რე მოდული რეგულარული გამონათქვამებისთვის

რეგულარული გამონათქვამები თითქმის ნებისმიერი პროგრამირების ენის ძალიან პოპულარული კომპონენტია. ისინი დაგეხმარებათ სწრაფად მიიღოთ თქვენთვის საჭირო ინფორმაცია. კერძოდ, ისინი გამოიყენება, როდესაც საჭიროა ტექსტის დამუშავება. სტანდარტულად პითონს გააჩნია სპეციალური მოდული. re, რომელიც პასუხისმგებელია რეგულარულ გამონათქვამებთან მუშაობაზე.

დღეს ჩვენ დეტალურად ვისაუბრებთ იმაზე, თუ რა არის ეს ზოგადად, როგორ ვიმუშაოთ მათთან და როგორ მოდული re დაგეხმარები.

რეგულარული გამონათქვამები: შესავალი

რა არის რეგულარული გამონათქვამების გამოყენება? Თითქმის ყველა. მაგალითად, ესენი:

  1. ვებ აპლიკაციები, რომლებიც საჭიროებენ ტექსტის ვალიდაციას. ტიპიური მაგალითია ონლაინ ფოსტის კლიენტები.
  2. ნებისმიერი სხვა პროექტი, რომელიც დაკავშირებულია ტექსტებთან, მონაცემთა ბაზებთან და ა.შ.

სანამ სინტაქსის ანალიზს დავიწყებთ, უფრო დეტალურად უნდა გავიგოთ ბიბლიოთეკის ფუნქციონირების ძირითადი პრინციპები. re და ზოგადად, რა არის მასში ზოგადად კარგი. ასევე მოვიყვანთ მაგალითებს რეალური პრაქტიკიდან, სადაც აღვწერთ მათი გამოყენების მექანიზმს. თქვენ შეგიძლიათ შექმნათ ისეთი შაბლონი, რომელიც თქვენთვის შესაფერისია ტექსტით მრავალფეროვანი ოპერაციების შესასრულებლად.

რა არის შაბლონი Re ბიბლიოთეკაში?

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

მაგალითად, აიღეთ შემდეგი შაბლონი: s+. ეს ნიშნავს ნებისმიერ კოსმოსურ ხასიათს. თუ მას დაამატებთ პლუს ნიშანს, მაშინ ეს ნიშნავს, რომ ნიმუში მოიცავს ერთზე მეტ სივრცეს. მას შეუძლია შეესაბამებოდეს ჩანართების სიმბოლოებსაც კი, რომლებითაც არის გამოძახებული t+.

მათ გამოყენებამდე საჭიროა ბიბლიოთეკის იმპორტი Re. ამის შემდეგ ჩვენ ვიყენებთ სპეციალურ ბრძანებას შაბლონის შედგენისთვის. ეს კეთდება ორ ეტაპად.

>>> იმპორტი რე

>>> regex = re.compile('s+')

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

ცალკეული ინფორმაციის მიღება სხვადასხვა სტრიქონიდან რეგულარული გამონათქვამების გამოყენებით

დავუშვათ, რომ გვაქვს ცვლადი, რომელიც შეიცავს შემდეგ ინფორმაციას.

>>> text = “””100 INF ინფორმატიკა

213 MAT მათემატიკა  

156 ENG ინგლისური»»»

იგი შეიცავს სამ სასწავლო კურსს. თითოეული მათგანი შედგება სამი ნაწილისაგან - ნომერი, კოდი და სახელი. ჩვენ ვხედავთ, რომ ამ სიტყვებს შორის ინტერვალი განსხვავებულია. რა უნდა გავაკეთოთ იმისათვის, რომ ეს ხაზი დავყოთ ცალკეულ რიცხვებად და სიტყვებად? ამ მიზნის მისაღწევად ორი გზა არსებობს:

  1. ფუნქციის გამოძახება ხელახლა გაყოფა.
  2. ფუნქციის გამოყენება გაყოფილი ამისთვის რეგესი.

აქ მოცემულია ჩვენი ცვლადის თითოეული მეთოდის სინტაქსის გამოყენების მაგალითი.

>>> re.split('s+', ტექსტი)  

# ან

>>> regex.split(ტექსტი)

გამომავალი: ['100', 'INF', 'კომპიუტერული მეცნიერება', '213', 'MAT', 'მათემატიკა', '156', 'ENG', 'ინგლისური']

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

შესატყვისების პოვნა სამი ფუნქციით

ვთქვათ, ჩვენ გვჭირდება მხოლოდ რიცხვების ამოღება სტრიქონიდან. რა უნდა გაკეთდეს ამისთვის?

re.findall()

აქ არის ფუნქციის გამოყენების შემთხვევა findall (), რომელიც რეგულარულ გამონათქვამებთან ერთად საშუალებას გაძლევთ ამოიღოთ ერთი ან მეტი რიცხვის შემთხვევები ტექსტის ცვლადიდან.

>>> ბეჭდვა (ტექსტი)  

100 INF ინფორმატიკა

213 MAT მათემატიკა  

156 ENG ინგლისური

>>> regex_num = re.compile('d+')  

>>> regex_num.findall(ტექსტი)  

['100', '213', '156']

d სიმბოლოსთან ერთად, ჩვენ გამოვიყენეთ შაბლონი, რომელიც მიუთითებს აბსოლუტურად ნებისმიერ ციფრულ მნიშვნელობას, რომელიც მდებარეობს ცვლადში ან ტექსტში. და რადგან ჩვენ დავამატეთ ერთი + იქ, ეს ნიშნავს, რომ მინიმუმ ერთი რიცხვი უნდა იყოს წარმოდგენილი. 

თქვენ ასევე შეგიძლიათ გამოიყენოთ * ნიშანი, რათა მიუთითოთ, რომ ციფრის არსებობა არ არის საჭირო შესატყვისის მოსაძებნად.

მაგრამ ჩვენს შემთხვევაში, რადგან ჩვენ გამოვიყენეთ +, ჩვენ ამოვიღეთ findall () კურსების 1 ან მეტი ციფრული აღნიშვნა ტექსტიდან. ამრიგად, ჩვენს შემთხვევაში, რეგულარული გამონათქვამები მოქმედებენ როგორც პარამეტრები ფუნქციისთვის.

re.search() vs re.match()

როგორც ფუნქციების დასახელებიდან მიხვდებით, პირველი ეძებს შესატყვისს ტექსტში. კითხვა: რა განსხვავებაა იპოვე? საქმე იმაშია, რომ ის აბრუნებს კონკრეტულ ობიექტს, რომელიც ემთხვევა ნიმუშს და არა ნაპოვნი შედეგების მთელ თანმიმდევრობას სიის სახით, როგორც წინა ფუნქცია.

თავის მხრივ, re.match ფუნქცია იგივეს აკეთებს. მხოლოდ სინტაქსია განსხვავებული. შაბლონი უნდა განთავსდეს დასაწყისში. 

ავიღოთ მაგალითი, რომელიც ამას ადასტურებს.

>>> # შექმენით ცვლადი ტექსტით

>>> text2 = «»»INF ინფორმატიკა

213 MAT მათემატიკა 156″»»  

>>> # შეადგინეთ რეგექსი და მოძებნეთ შაბლონები

>>> regex_num = re.compile('d+')  

>>> s = regex_num.search(ტექსტი2)  

>>> print('პირველი ინდექსი:', s.start())  

>>> print('ბოლო ინდექსი:', s.end())  

>>> print(text2[s.start():s.end()]) 

პირველი ინდექსი: 17 

ბოლო ინდექსი: 20

213

თუ გსურთ მიიღოთ მსგავსი შედეგი სხვაგვარად, შეგიძლიათ გამოიყენოთ ფუნქცია ჯგუფი ().

ტექსტის ნაწილის შეცვლა Re ბიბლიოთეკით

ტექსტის შესაცვლელად გამოიყენეთ ფუნქცია re.sub(). დავუშვათ, ჩვენი კურსების სია ოდნავ შეიცვალა. ჩვენ ვხედავთ, რომ ყოველი ციფრული მნიშვნელობის შემდეგ გვაქვს ჩანართი. ჩვენი ამოცანაა გავაერთიანოთ მთელი ეს თანმიმდევრობა ერთ ხაზში. ამისათვის ჩვენ უნდა შევცვალოთ გამოხატულება s+ გაივლის 

ორიგინალური ტექსტი იყო:

# შექმენით ცვლადი ტექსტით

>>> text = “””100 INF t ინფორმატიკა

213 MAT t მათემ  

156 ENG t ინგლისური»»»  

>>> ბეჭდვა (ტექსტი)  

100 ინფორმაცია ინფორმატიკა

213 MAT მათემატიკის  

156 ENG ინგლისური

სასურველი ოპერაციის შესასრულებლად გამოვიყენეთ კოდის შემდეგი სტრიქონები.

# შეცვალეთ ერთი ან მეტი ადგილი 1-ით

>>> regex = re.compile('s+')  

>>> ბეჭდვა (regex.sub(' ', ტექსტი))  

შედეგად, ჩვენ გვაქვს ერთი ხაზი. 

101 COM კომპიუტერები 205 MAT მათემატიკა 189 ENG ინგლისური

ახლა განიხილეთ სხვა პრობლემა. ჩვენ არ ვდგავართ სივრცეების დაყენების ამოცანა. ჩვენთვის ბევრად უფრო მნიშვნელოვანია, რომ ყველა კურსის სახელები დაიწყოს ახალი ხაზით. ამისათვის გამოიყენება სხვა გამონათქვამი, რომელიც ამატებს ახალ ხაზს გამონაკლისს. ეს რა სახის გამოთქმაა?

ბიბლიოთეკა Re მხარს უჭერს ისეთ ფუნქციას, როგორიცაა უარყოფითი შესატყვისი. ის განსხვავდება პირდაპირისგან იმით, რომ შეიცავს ძახილის ნიშანს ხაზამდე. ანუ, თუ ახალი ხაზის სიმბოლოს გამოტოვება გვჭირდება, მაშინ n-ის ნაცვლად უნდა დავწეროთ !n.

ჩვენ ვიღებთ შემდეგ კოდს.

# წაშალეთ ყველა სივრცე ახალი ხაზის გარდა  

>>> regex = re.compile('((?!n)s+)')  

>>> ბეჭდვა (regex.sub(' ', ტექსტი))  

100 INF ინფორმატიკა

213 MAT მათემატიკა  

156 ENG ინგლისური

რა არის რეგულარული გამოხატვის ჯგუფები?

რეგულარული გამონათქვამების ჯგუფების დახმარებით ჩვენ შეგვიძლია მივიღოთ სასურველი ობიექტები ცალკეული ელემენტების სახით და არა ერთ ხაზზე. 

დავუშვათ, რომ ჩვენ უნდა მივიღოთ კურსის ნომერი, კოდი და სახელი არა ერთ ხაზზე, არამედ ცალკეულ ელემენტებად. დავალების შესასრულებლად, თქვენ უნდა დაწეროთ უამრავი არასაჭირო სტრიქონი კოდი. 

სინამდვილეში, ამოცანა შეიძლება მნიშვნელოვნად გამარტივდეს. თქვენ შეგიძლიათ შეადგინოთ შაბლონი ყველა ჩანაწერისთვის და უბრალოდ მიუთითოთ მონაცემები, რომლებიც უნდა მიიღოთ ფრჩხილებიდან.

ხაზების ძალიან მცირე რაოდენობა იქნება. 

# შექმენით ჯგუფები კურსის ტექსტის შაბლონები და ამოიღეთ ისინი

>>> კურსი_ნიმუში = '([0-9]+)s*([A-ZY]{3})s*([a-zA-ZoY]{4,})'  

>>> re.findall(კურსის_ნიმუში, ტექსტი)  

[('100', 'INF', 'კომპიუტერული მეცნიერება'), ('213', 'MAT', 'მათემატიკა'), ('156', 'ENG', 'ინგლისური')]

"ხარბ" შესატყვისობის კონცეფცია

სტანდარტის მიხედვით, რეგულარული გამონათქვამები დაპროგრამებულია შესატყვისი მონაცემების მაქსიმალური რაოდენობის ამოსაღებად. და მაშინაც კი, თუ გაცილებით ნაკლები გჭირდებათ.

მოდით შევხედოთ HTML კოდის ნიმუშს, სადაც უნდა მივიღოთ ტეგი.

>>> text = "ხარბი რეგულარული გამოხატვის შესატყვისის მაგალითი"  

>>> re.findall('', ტექსტი)  

['გამაძღარი რეგულარული გამოთქმის შესატყვისის მაგალითი']

მხოლოდ ერთი ტეგის ამოღების ნაცვლად, პითონმა მიიღო მთელი სტრიქონი. ამიტომაც ჰქვია მას ხარბი.

და რა უნდა გააკეთოს მხოლოდ ტეგის მისაღებად? ამ შემთხვევაში, თქვენ უნდა გამოიყენოთ ზარმაცი შესატყვისი. ასეთი გამოხატვის დასაზუსტებლად შაბლონის ბოლოს ემატება კითხვის ნიშანი.

თქვენ მიიღებთ შემდეგ კოდს და თარჯიმნის გამომავალს.

>>> re.findall('', ტექსტი)  

[”, ”]

თუ საჭიროა მხოლოდ პირველი შემხვედრი შემთხვევის მიღება, მაშინ გამოიყენება მეთოდი ძებნა ().

re.search('', text).group()  

"

შემდეგ მხოლოდ გახსნის ტეგი მოიძებნება.

პოპულარული გამოხატვის შაბლონები

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

დოკუმენტაცია Re მოდულისთვის Python 3-ისთვის. რე მოდული რეგულარული გამონათქვამებისთვის

დასკვნა

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

ისინი საშუალებას გაძლევთ შეასრულოთ ისეთი ამოცანები, როგორიცაა:

  1. მონაცემების ფორმატის მითითება, როგორიცაა ელექტრონული ფოსტის მისამართი ან ტელეფონის ნომერი.
  2. სტრიქონის მიღება და რამდენიმე პატარა სტრინგად დაყოფა.
  3. შეასრულეთ სხვადასხვა ოპერაციები ტექსტით, როგორიცაა ძიება, საჭირო ინფორმაციის მოპოვება ან სიმბოლოების ნაწილის შეცვლა.

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

დატოვე პასუხი