Փաստաթղթեր Python 3-ի համար Re մոդուլի համար: Re մոդուլ կանոնավոր արտահայտությունների համար

Կանոնավոր արտահայտությունները գրեթե ցանկացած ծրագրավորման լեզվի շատ տարածված բաղադրիչ են: Նրանք օգնում են ձեզ արագ մուտք գործել անհրաժեշտ տեղեկատվություն: Մասնավորապես, դրանք օգտագործվում են, երբ անհրաժեշտ է մշակել տեքստը։ Python-ը լռելյայն գալիս է հատուկ մոդուլով: re, որը պատասխանատու է կանոնավոր արտահայտությունների հետ աշխատելու համար։

Այսօր մենք մանրամասն կխոսենք այն մասին, թե ինչ է դա ընդհանրապես, ինչպես աշխատել նրանց հետ և ինչպես է մոդուլը re կօգնի.

Կանոնավոր արտահայտություններ. ներածություն

Որո՞նք են կանոնավոր արտահայտությունների օգտագործումը: Գրեթե բոլոր. Օրինակ՝ սրանք.

  1. Վեբ հավելվածներ, որոնք պահանջում են տեքստի վավերացում: Տիպիկ օրինակ են առցանց փոստի հաճախորդները:
  2. Ցանկացած այլ նախագիծ՝ կապված տեքստերի, տվյալների բազաների և այլնի հետ:

Նախքան շարահյուսությունը վերլուծելը, մենք պետք է ավելի մանրամասն հասկանանք գրադարանի գործունեության հիմնական սկզբունքները. re և ընդհանրապես, ինչն է դրա մեջ ընդհանուր առմամբ լավը: Կբերենք նաև օրինակներ իրական պրակտիկայից, որտեղ կնկարագրենք դրանց կիրառման մեխանիզմը։ Դուք կարող եք ստեղծել այնպիսի ձևանմուշ, որը ձեզ հարմար է տեքստով գործողություններ իրականացնելու համար:

Ի՞նչ է կաղապարը Re գրադարանում:

Դրա միջոցով կարող եք փնտրել տարբեր տեսակի տեղեկություններ, ստանալ դրանց համապատասխան տեղեկատվություն՝ այլ գործառույթներն ավելի հարմարվողական դարձնելու համար։ Եվ, իհարկե, մշակել այս տվյալները։

Օրինակ, վերցրեք հետևյալ ձևանմուշը. s+. Դա նշանակում է ցանկացած տիեզերական բնույթ: Եթե ​​դրան գումարած նշան եք ավելացնում, ապա դա նշանակում է, որ նախշը ներառում է մեկից ավելի տարածություն: Այն կարող է նույնիսկ համընկնել ներդիրի նիշերին, որոնց հետ կանչվում են t+.

Նախքան դրանք օգտագործելը, դուք պետք է ներմուծեք գրադարանը Re. Դրանից հետո մենք օգտագործում ենք հատուկ հրաման կաղապարը կազմելու համար։ Սա արվում է երկու քայլով.

>>> ներմուծում ռե

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

Մասնավորապես, այս կոդը կատարում է կաղապարի կազմման գործողությունը, որը կարելի է օգտագործել։ օրինակ՝ բացատներ (մեկ կամ ավելի) որոնելու համար։

Կանոնավոր արտահայտությունների միջոցով տարբեր տողերից առանձին տեղեկություններ ստանալը

Ենթադրենք, մենք ունենք հետևյալ տեղեկատվությունը պարունակող փոփոխական.

>>> text = “””100 INF Ինֆորմատիկա

213 ՄԱՏ Մաթեմատիկա  

156 ENG Անգլերեն»»»

Այն պարունակում է երեք վերապատրաստման դասընթացներ: Նրանցից յուրաքանչյուրը բաղկացած է երեք մասից՝ համարը, ծածկագիրը և անվանումը: Մենք տեսնում ենք, որ այս բառերի միջև ընկած ժամանակահատվածը տարբեր է: Ի՞նչ անել, որպեսզի այս տողը բաժանվի առանձին թվերի և բառերի: Այս նպատակին հասնելու երկու եղանակ կա.

  1. զանգահարել գործառույթ կրկին պառակտել.
  2. կիրառել գործառույթը պառակտում համար կարգավորումը.

Ահա մեր փոփոխականի համար մեթոդներից յուրաքանչյուրի շարահյուսության օգտագործման օրինակ:

>>> re.split('s+', text)  

# կամ

>>> regex.split (տեքստ)

Արդյունք՝ ['100', 'INF', 'Համակարգչային գիտություն', '213', 'MAT', 'Math', '156', 'ENG', 'Անգլերեն']

Ընդհանուր առմամբ, երկու մեթոդներն էլ կարող են օգտագործվել: Բայց իրականում շատ ավելի հեշտ է օգտագործել կանոնավոր արտահայտություն՝ ֆունկցիան մի քանի անգամ օգտագործելու փոխարեն: կրկին պառակտել.

Գտեք համընկնումներ երեք գործառույթներով

Ենթադրենք, մենք պետք է միայն թվեր հանենք տողից։ Ի՞նչ է պետք անել դրա համար։

re.findall()

Ահա ֆունկցիայի օգտագործման դեպքը գտնել (), որը կանոնավոր արտահայտությունների հետ միասին թույլ է տալիս տեքստային փոփոխականից հանել մեկ կամ մի քանի թվերի դեպքեր։

>>> տպել (տեքստ)  

100 INF Ինֆորմատիկա

213 ՄԱՏ Մաթեմատիկա  

156 ENG Անգլերեն

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

>>> regex_num.findall(տեքստ)  

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

d նշանի հետ միասին մենք օգտագործեցինք ձևանմուշ, որը ցույց է տալիս բացարձակապես ցանկացած թվային արժեք, որը գտնվում է փոփոխականում կամ տեքստում: Եվ քանի որ այնտեղ ավելացրել ենք մեկ +, սա նշանակում է, որ առնվազն մեկ թիվ պետք է լինի: 

Կարող եք նաև օգտագործել * նշանը՝ նշելու, որ թվանշանի առկայությունը պարտադիր չէ համընկնում գտնելու համար:

Բայց մեր դեպքում, քանի որ մենք օգտագործել ենք +, մենք արդյունահանել ենք գտնել () Դասընթացների 1 կամ ավելի թվային նշանակումներ տեքստից: Այսպիսով, մեր դեպքում կանոնավոր արտահայտությունները գործում են որպես ֆունկցիայի կարգավորումներ։

re.search() vs re.match()

Ինչպես կարող եք կռահել գործառույթների անունից, առաջինը տեքստում համընկնում է փնտրում: Հարց. Ո՞րն է տարբերությունը գտնել? Բանն այն է, որ այն վերադարձնում է օրինաչափությանը համապատասխանող կոնկրետ օբյեկտ, և ոչ թե գտած արդյունքների ամբողջ հաջորդականությունը ցուցակի տեսքով, ինչպես նախորդ ֆունկցիան։

Իր հերթին, re.match ֆունկցիան նույնն է անում: Միայն շարահյուսությունն է տարբեր: Կաղապարը պետք է տեղադրվի սկզբում: 

Բերենք մի օրինակ, որը ցույց է տալիս դա։

>>> # ստեղծել փոփոխական տեքստով

>>> text2 = «»»INF Ինֆորմատիկա

213 MAT Մաթեմատիկա 156″»»  

>>> # կազմեք ռեգեքս և փնտրեք օրինաչափություններ

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

>>> s = regex_num.search(text2)  

>>> print('Առաջին ինդեքս.', s.start())  

>>> print('Վերջին ինդեքսը', s.end())  

>>> տպել (տեքստ 2[s.start():s.end()]) 

Առաջին ցուցանիշը՝ 17 

Վերջին ցուցանիշը՝ 20

213

Եթե ​​ցանկանում եք նմանատիպ արդյունք ստանալ այլ կերպ, կարող եք օգտագործել ֆունկցիան խումբ ().

Տեքստի մի մասի փոխարինում Re գրադարանով

Տեքստը փոխարինելու համար օգտագործեք գործառույթը re.sub(). Ենթադրենք, մեր դասընթացների ցանկը մի փոքր փոխվել է։ Մենք տեսնում ենք, որ յուրաքանչյուր թվային արժեքից հետո մենք ունենք ներդիր: Մեր խնդիրն է միավորել այս ամբողջ հաջորդականությունը մեկ տողի մեջ։ Դա անելու համար մենք պետք է փոխարինենք s+ արտահայտությունը անցնել 

Բնօրինակ տեքստը հետևյալն էր.

# ստեղծել փոփոխական տեքստով

>>> text = “””100 INF t Ինֆորմատիկա

213 MAT t Մաթ  

156 ENG t Անգլերեն»»»  

>>> տպել (տեքստ)  

100 ԻՆՖՈ Ինֆորմատիկա

213 ՄԱՏ Մաթեմատիկա  

156 ԱՆԳ Անգլերեն

Ցանկալի գործողությունը կատարելու համար օգտագործեցինք կոդերի հետևյալ տողերը.

# փոխարինեք մեկ կամ մի քանի բացատ 1-ով

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

>>> տպել (regex.sub (' ', տեքստ))  

Արդյունքում մենք ունենք մեկ տող. 

101 COM Computers 205 MAT Mathematics 189 ENG Անգլ

Հիմա հաշվի առեք մեկ այլ խնդիր. Մենք բացատներ դնելու խնդիր չունենք։ Մեզ համար շատ ավելի կարևոր է, որ բոլոր դասընթացների անվանումները սկսվեն նոր տողով։ Դա անելու համար օգտագործվում է մեկ այլ արտահայտություն, որը բացառությանը նոր տող է ավելացնում: Սա ի՞նչ արտահայտություն է։

գրադարան Re աջակցում է այնպիսի հատկանիշ, ինչպիսին է բացասական համընկնումը: Այն ուղիղից տարբերվում է նրանով, որ շեղից առաջ բացականչական նշան է պարունակում։ Այսինքն, եթե մենք պետք է բաց թողնենք նոր տողի նիշը, ապա n-ի փոխարեն պետք է գրել !n:

Մենք ստանում ենք հետևյալ կոդը.

# հեռացնել բոլոր բացատները, բացի նոր տողից  

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

>>> տպել (regex.sub (' ', տեքստ))  

100 INF Ինֆորմատիկա

213 ՄԱՏ Մաթեմատիկա  

156 ENG Անգլերեն

Որո՞նք են կանոնավոր արտահայտությունների խմբերը:

Կանոնավոր արտահայտությունների խմբերի օգնությամբ մենք կարող ենք ցանկալի օբյեկտները ստանալ առանձին տարրերի տեսքով, այլ ոչ թե մեկ տողով։ 

Ենթադրենք դասընթացի համարը, կոդը և անունը պետք է ստանանք ոչ թե մեկ տողով, այլ որպես առանձին տարրեր։ Առաջադրանքը կատարելու համար ձեզ հարկավոր է գրել հսկայական քանակությամբ անհարկի կոդ: 

Իրականում, խնդիրը կարող է մեծապես պարզեցվել: Դուք կարող եք կազմել ձևանմուշը բոլոր գրառումների համար և պարզապես նշել այն տվյալները, որոնք դուք պետք է ստանաք փակագծերից:

Շատ քիչ թվով տողեր կլինեն։ 

# Ստեղծեք դասընթացի տեքստային ձևանմուշների խմբեր և հանեք դրանք

>>> course_pattern = '([0-9]+)s*([A-ZY]{3})s*([a-zA-ZoY]{4,})'  

>>> re.findall (դասընթացի_օրինակ, տեքստ)  

[('100', 'INF', 'Համակարգչային գիտություն'), ('213', 'MAT', 'Math'), ('156', 'ENG', 'Անգլերեն')]

«Ագահ» համապատասխանության հայեցակարգը

Ստանդարտի համաձայն, կանոնավոր արտահայտությունները ծրագրավորվում են համապատասխան տվյալների առավելագույն քանակությունը հանելու համար: Եվ նույնիսկ եթե ձեզ շատ ավելի քիչ է պետք:

Եկեք նայենք HTML կոդի օրինակին, որտեղ մենք պետք է ստանանք պիտակը:

>>> text = «Ագահ կանոնավոր արտահայտությունների համապատասխանության օրինակ»  

>>> re.findall('', տեքստ)  

['Ագահ կանոնավոր արտահայտությունների համապատասխանության օրինակ']

Ընդամենը մեկ պիտակ հանելու փոխարեն Python-ը ստացավ ամբողջ տողը: Դրա համար էլ այն կոչվում է ագահ։

Իսկ ի՞նչ անել միայն պիտակը ստանալու համար։ Այս դեպքում դուք պետք է օգտագործեք ծույլ համընկնումը: Նման արտահայտությունը նշելու համար նախշի վերջում հարցական նշան է ավելացվում։

Դուք կստանաք հետևյալ կոդը և թարգմանչի ելքը.

>>> re.findall('', տեքստ)  

[», «]

Եթե ​​պահանջվում է ստանալ միայն առաջին հանդիպած երևույթը, ապա կիրառվում է մեթոդը որոնում ().

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

"

Այնուհետև կգտնվի միայն բացման պիտակը:

Հանրաճանաչ արտահայտությունների կաղապարներ

Ահա աղյուսակ, որը պարունակում է առավել հաճախ օգտագործվող կանոնավոր արտահայտությունների օրինաչափություններ:

Փաստաթղթեր Python 3-ի համար Re մոդուլի համար: Re մոդուլ կանոնավոր արտահայտությունների համար

եզրափակում

Մենք դիտարկել ենք կանոնավոր արտահայտությունների հետ աշխատելու միայն ամենահիմնական մեթոդները: Ամեն դեպքում, դուք տեսաք, թե որքան կարևոր են դրանք։ Եվ այստեղ տարբերություն չկա՝ անհրաժեշտ է վերլուծել ամբողջ տեքստը, թե դրա առանձին հատվածները, անհրաժեշտ է վերլուծել գրառումը սոցիալական ցանցում, թե տվյալներ հավաքել՝ այն հետագայում մշակելու համար։ Այս հարցում հուսալի օգնական են կանոնավոր արտահայտությունները։

Նրանք թույլ են տալիս կատարել այնպիսի առաջադրանքներ, ինչպիսիք են.

  1. Նշելով տվյալների ձևաչափը, օրինակ՝ էլփոստի հասցեն կամ հեռախոսահամարը:
  2. Ստանալ լար և բաժանել այն մի քանի փոքր տողերի:
  3. Կատարեք տարբեր գործողություններ տեքստի հետ, ինչպիսիք են որոնումը, անհրաժեշտ տեղեկատվության արդյունահանումը կամ նիշերի մի մասի փոխարինումը:

Կանոնավոր արտահայտությունները նաև թույլ են տալիս կատարել ոչ տրիվիալ գործողություններ: Առաջին հայացքից այս գիտությանը տիրապետելը հեշտ չէ։ Բայց գործնականում ամեն ինչ ստանդարտացված է, ուստի բավական է մեկ անգամ պարզել, որից հետո այս գործիքը կարող է օգտագործվել ոչ միայն Python-ում, այլև ցանկացած այլ ծրագրավորման լեզվով։ Նույնիսկ Excel-ն օգտագործում է սովորական արտահայտություններ տվյալների մշակումն ավտոմատացնելու համար: Այսպիսով, մեղք է չօգտագործել այս գործիքը:

Թողնել գրառում