Документација за Ре модул за Питхон 3 у . Ре модул за регуларне изразе

Регуларни изрази су веома популарна компонента скоро сваког програмског језика. Они вам помажу да брзо приступите информацијама које су вам потребне. Посебно се користе када је потребно обрадити текст. Питхон подразумевано долази са посебним модулом. re, који је одговоран за рад са регуларним изразима.

Данас ћемо детаљно говорити о томе шта је то уопште, како радити са њима и како модул re помоћи ће.

Регуларни изрази: увод

Која је употреба регуларних израза? Скоро све. На пример, ове:

  1. Веб апликације које захтевају валидацију текста. Типичан пример су онлајн клијенти поште.
  2. Било који други пројекти који се односе на текстове, базе података и тако даље.

Пре него што почнемо да анализирамо синтаксу, требало би детаљније да разумемо основне принципе функционисања библиотеке re и уопште, шта је у томе генерално добро. Навешћемо и примере из стварне праксе, где ћемо описати механизам њихове употребе. Можете креирати такав шаблон, погодан за вас да извршите широк спектар операција са текстом.

Шта је шаблон у библиотеци Ре?

Помоћу њега можете тражити информације различитих типова, добити информације које им одговарају, како бисте друге функције учинили прилагодљивијим. И, наравно, за обраду ових података.

На пример, узмите следећи шаблон: s+. То значи било који размак. Ако му додате знак плус, то значи да образац укључује више од једног размака. Може чак и да одговара знаковима табулатора који се позивају са t+.

Пре него што их употребите, морате да увезете библиотеку Re. Након тога користимо посебну команду за састављање шаблона. Ово се ради у два корака.

>>> импорт ре

>>> регек = ре.цомпиле('с+')

Конкретно, овај код обавља операцију компајлирања шаблона који се може користити. на пример, за тражење размака (један или више).

Добијање одвојених информација из различитих стрингова помоћу регуларних израза

Претпоставимо да имамо променљиву која садржи следеће информације.

>>> текст = “””100 ИНФ Информатика

213 МАТ Математика  

156 ЕНГ Енглисх»»»

Садржи три курса обуке. Сваки од њих се састоји из три дела – броја, шифре и назива. Видимо да је интервал између ових речи различит. Шта учинити да се овај ред разбије на засебне бројеве и речи? Постоје два метода за постизање овог циља:

  1. позвати функцију ре.сплит.
  2. применити функцију сплит за регек.

Ево примера коришћења синтаксе сваке од метода за нашу променљиву.

>>> ре.сплит('с+', текст)  

# или

>>> регек.сплит(текст)

Излаз: ['100', 'ИНФ', 'Информатика', '213', 'МАТ', 'Математика', '156', 'ЕНГ', 'Енглески']

Генерално, обе методе се могу користити. Али заправо је много лакше користити регуларни израз уместо вишеструке употребе функције. ре.сплит.

Проналажење подударања са три функције

Рецимо да треба да издвојимо само бројеве из низа. Шта треба учинити за ово?

ре.финдалл()

Ево случаја употребе функције финдалл(), који вам, заједно са регуларним изразима, омогућава да издвојите појављивања једног или више бројева из текстуалне променљиве.

>>> штампа (текст)  

100 ИНФ Информатика

213 МАТ Математика  

156 ЕНГ енглески

>>> регек_нум = ре.цомпиле('д+')  

>>> регек_нум.финдалл(текст)  

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

Заједно са симболом д користили смо шаблон који означава апсолутно сваку нумеричку вредност која се налази у променљивој или тексту. А пошто смо тамо додали један +, то значи да мора бити присутан бар један број. 

Такође можете користити знак * да наведете да присуство цифре није потребно да би се пронашло подударање.

Али у нашем случају, пошто смо користили +, извукли смо са финдалл() 1 или више дигиталних ознака предмета из текста. Дакле, у нашем случају, регуларни изрази делују као подешавања за функцију.

ре.сеарцх() вс ре.матцх()

Као што можете претпоставити из назива функција, прва тражи подударање у тексту. Питање: Која је разлика између финдалл? Поента је да враћа одређени објекат који одговара шаблону, а не цео низ пронађених резултата у облику листе, као претходна функција.

Заузврат, функција ре.матцх ради исто. Само је синтакса другачија. Шаблон мора бити постављен на почетку. 

Узмимо пример који то показује.

>>> # креирај променљиву са текстом

>>> тект2 = «»»ИНФ информатика

213 МАТ Математика 156″»»  

>>> # компајлирај регуларни израз и тражи обрасце

>>> регек_нум = ре.цомпиле('д+')  

>>> с = регек_нум.сеарцх(тект2)  

>>> принт('Први индекс: ', с.старт())  

>>> принт('Последњи индекс: ', с.енд())  

>>> принт(текст2[с.старт():с.енд()]) 

Први индекс: 17 

Последњи индекс: 20

213

Ако желите да добијете сличан резултат на другачији начин, можете користити функцију група().

Замена дела текста са Ре библиотеком

Да бисте заменили текст, користите функцију ре.суб(). Претпоставимо да се наша листа курсева мало променила. Видимо да после сваке дигиталне вредности имамо картицу. Наш задатак је да комбинујемо сав овај низ у једну линију. Да бисмо то урадили, морамо да заменимо израз с+ да прође 

Оригинални текст је био:

# креирајте променљиву са текстом

>>> текст = “””100 ИНФ т Информатика

213 МАТ т Матх  

156 ЕНГ т Енглисх»»»  

>>> штампа (текст)  

100 ИНФО Информатика

213 МАТ Математика  

156 ЕНГ Енглески

Да бисмо извршили жељену операцију, користили смо следеће линије кода.

# замените један или више размака са 1

>>> регек = ре.цомпиле('с+')  

>>> принт(регек.суб(' , текст))  

Као резултат, имамо једну линију. 

101 ЦОМ Рачунари 205 МАТ Математика 189 ЕНГ енглески

Сада размотрите још један проблем. Ми нисмо суочени са задатком стављања размака. За нас је много важније да сви називи курсева почињу на новом реду. Да бисте то урадили, користи се други израз који додаје нови ред изузетку. Какав је ово израз?

Library (Библиотека) Re подржава функцију као што је негативно подударање. Од директног се разликује по томе што садржи узвичник испред косе црте. То јест, ако треба да прескочимо знак новог реда, онда треба да напишемо !н уместо н.

Добијамо следећи код.

# уклоните све размаке осим новог реда  

>>> регек = ре.цомпиле('((?!н)с+)')  

>>> принт(регек.суб(' , текст))  

100 ИНФ Информатика

213 МАТ Математика  

156 ЕНГ енглески

Шта су групе регуларних израза?

Уз помоћ група регуларних израза можемо добити жељене објекте у облику засебних елемената, а не у једном реду. 

Претпоставимо да треба да добијемо број курса, шифру и назив не у једном реду, већ као засебне елементе. Да бисте извршили задатак, мораћете да напишете огроман број непотребних линија кода. 

У ствари, задатак се може знатно поједноставити. Можете саставити шаблон за све уносе и само навести податке које треба да добијете из заграда.

Биће веома мали број линија. 

# креирајте групе шаблона текста курса и извуците их

>>> паттерн_паттерн = '([0-9]+)с*([А-ЗИ]{3})с*([а-зА-ЗоИ]{4,})'  

>>> ре.финдалл(образац_курса, текст)  

[('100', 'ИНФ', 'Информатика'), ('213', 'МАТ', 'Математика'), ('156', 'ЕНГ', 'енглески')]

Концепт „похлепног” подударања

По стандарду, регуларни изрази су програмирани да извуку максималну количину подударних података. Па чак и ако вам треба много мање.

Хајде да погледамо пример ХТМЛ кода где треба да добијемо ознаку.

>>> тект = “Пример похлепног подударања регуларног израза”  

>>> ре.финдалл('', текст)  

['Пример похлепног подударања регуларног израза']

Уместо да издвоји само једну ознаку, Питхон је добио цео стринг. Због тога се назива похлепним.

А шта да урадите да добијете само ознаку? У овом случају, морате користити лењо подударање. Да бисте одредили такав израз, знак питања се додаје на крај шаблона.

Добићете следећи код и излаз интерпретатора.

>>> ре.финдалл('', текст)  

[”, ”]

Ако је потребно да се добије само прва наишла појава, онда се користи метода Претрага ().

ре.сеарцх('', тект).гроуп()  

"

Тада ће се пронаћи само почетна ознака.

Популарни шаблони израза

Ево табеле која садржи најчешће коришћене обрасце регуларних израза.

Документација за Ре модул за Питхон 3 у . Ре модул за регуларне изразе

Zakljucak

Размотрили смо само најосновније методе за рад са регуларним изразима. У сваком случају, видели сте колико су они важни. И овде је свеједно да ли је потребно рашчланити цео текст или његове појединачне фрагменте, да ли је потребно анализирати објаву на друштвеној мрежи или прикупити податке да би се касније обрадили. Регуларни изрази су поуздан помоћник у овој ствари.

Они вам омогућавају да обављате задатке као што су:

  1. Одређивање формата података, као што је адреса е-поште или број телефона.
  2. Добивање низа и раздвајање на неколико мањих жица.
  3. Обављајте различите операције са текстом, као што су претраживање, издвајање потребних информација или замена дела знакова.

Регуларни изрази вам такође омогућавају да обављате не-тривијалне операције. На први поглед, савладавање ове науке није лако. Али у пракси је све стандардизовано, па је довољно да то схватите једном, након чега се овај алат може користити не само у Питхон-у, већ иу било ком другом програмском језику. Чак и Екцел користи регуларне изразе за аутоматизацију обраде података. Дакле, грех је не користити овај алат.

Ostavite komentar