Дакументацыя для модуля Re для Python 3 у . Re модуль для рэгулярных выразаў

Рэгулярныя выразы - вельмі папулярны кампанент практычна любой мовы праграмавання. Яны дапамагаюць хутка атрымаць доступ да патрэбнай інфармацыі. У прыватнасці, яны выкарыстоўваюцца, калі неабходна апрацаваць тэкст. Па змаўчанні Python пастаўляецца са спецыяльным модулем. re, які адказвае за працу з рэгулярнымі выразамі.

Сёння мы падрабязна пагаворым аб тым, што гэта наогул такое, як з імі працаваць і як працуе модуль re дапаможа.

Рэгулярныя выразы: уводзіны

Для чаго выкарыстоўваюцца рэгулярныя выразы? Амаль усе. Напрыклад, гэтыя:

  1. Вэб-праграмы, якія патрабуюць праверкі тэксту. Тыповы прыклад - паштовыя кліенты онлайн.
  2. Любыя іншыя праекты, звязаныя з тэкстамі, базамі даных і гэтак далей.

Перш чым прыступіць да разбору сінтаксісу, варта падрабязней разабрацца з асноўнымі прынцыпамі функцыянавання бібліятэкі re і ўвогуле, што ў ім наогул добрага. Таксама прывядзем прыклады з рэальнай практыкі, дзе апішам механізм іх выкарыстання. Вы можаце стварыць такі шаблон, прыдатны для выканання самых розных аперацый з тэкстам.

Што такое шаблон у бібліятэцы Re?

З яго дапамогай вы можаце шукаць інфармацыю рознага тыпу, атрымліваць адпаведную інфармацыю, каб зрабіць іншыя функцыі больш адаптыўнымі. І, вядома, апрацоўваць гэтыя дадзеныя.

Напрыклад, возьмем наступны шаблон: s+. Гэта азначае любы прабел. Калі вы дадаеце да яго знак плюс, то гэта азначае, што шаблон уключае больш аднаго прабелу. Ён нават можа супаставіць сімвалы табуляцыі, якія выклікаюцца з t+.

Перад іх выкарыстаннем неабходна імпартаваць бібліятэку Re. Пасля гэтага мы выкарыстоўваем спецыяльную каманду для кампіляцыі шаблону. Робіцца гэта ў два этапы.

>>> імпарт рэ

>>> рэгулярны выраз = re.compile('s+')

У прыватнасці, гэты код выконвае аперацыю кампіляцыі шаблону, які можна выкарыстоўваць. напрыклад, для пошуку прабелаў (аднаго або некалькіх).

Атрыманне асобнай інфармацыі з розных радкоў з дапамогай рэгулярных выразаў

Дапусцім, у нас ёсць зменная, якая змяшчае наступную інфармацыю.

>>> тэкст = “””100 INF Інфарматыка

213 МАТ Матэматыка  

156 ENG Англійская»»»

Яна змяшчае тры навучальныя курсы. Кожны з іх складаецца з трох частак – нумара, кода і назвы. Мы бачым, што інтэрвал паміж гэтымі словамі розны. Што трэба зрабіць, каб разбіць гэты радок на асобныя лічбы і словы? Для дасягнення гэтай мэты ёсць два спосабу:

  1. выклікаць функцыю пера.раскол.
  2. прымяніць функцыю раскол для regex.

Вось прыклад выкарыстання сінтаксісу кожнага з метадаў для нашай зменнай.

>>> re.split('s+', тэкст)  

# або

>>> regex.split(тэкст)

Вывад: ['100', 'INF', 'Інфарматыка', '213', 'MAT', 'Math', '156', 'ENG', 'English']

Увогуле, можна выкарыстоўваць абодва спосабу. Але насамрэч нашмат прасцей выкарыстоўваць рэгулярны выраз замест выкарыстання функцыі некалькі разоў. пера.раскол.

Пошук супадзенняў з трыма функцыямі

Скажам, нам трэба атрымаць толькі лічбы з радка. Што для гэтага неабходна зрабіць?

re.findall()

Вось варыянт выкарыстання функцыі знайсці ўсё (), які разам з рэгулярнымі выразамі дазваляе здабываць адно ці некалькі лікаў з тэкставай зменнай.

>>> друк (тэкст)  

100 ИНФ Інфарматыка

213 МАТ Матэматыка  

156 ENG Англійская

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

>>> regex_num.findall(тэкст)  

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

Разам з сімвалам d мы выкарыстоўвалі шаблон, які паказвае абсалютна любое лікавае значэнне, размешчанае ў зменнай або тэксце. І паколькі мы дадалі туды адзін +, гэта азначае, што хаця б адна лічба павінна прысутнічаць. 

Вы таксама можаце выкарыстоўваць знак *, каб пазначыць, што наяўнасць лічбы не патрабуецца для пошуку супадзення.

Але ў нашым выпадку, паколькі мы выкарыстоўвалі +, мы здабывалі з дапамогай знайсці ўсё () 1 або некалькі лічбавых абазначэнняў курсаў з тэксту. Такім чынам, у нашым выпадку рэгулярныя выразы выступаюць у якасці параметраў для функцыі.

re.search() супраць re.match()

Як вы можаце здагадацца з назвы функцый, першая шукае супадзенне ў тэксце. Пытанне: у чым розніца паміж знайсці ўсё? Справа ў тым, што яна вяртае канкрэтны аб'ект, які адпавядае шаблону, а не ўсю паслядоўнасць знойдзеных вынікаў у выглядзе спісу, як папярэдняя функцыя.

У сваю чаргу, функцыя re.match робіць тое ж самае. Толькі сінтаксіс іншы. Шаблон неабходна размясціць у пачатку. 

Возьмем прыклад, які гэта дэманструе.

>>> # стварыць зменную з тэкстам

>>> text2 = «»»INF Інфарматыка

213 МАТ Матэматыка 156″»»  

>>> # скампіляваць рэгулярны выраз і шукаць шаблоны

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

>>> s = regex_num.search(text2)  

>>> print('Першы індэкс: ', s.start())  

>>> print('Апошні індэкс:', s.end())  

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

Першы індэкс: 17 

Апошні індэкс: 20

213

Калі вы хочаце атрымаць аналагічны вынік іншым спосабам, вы можаце выкарыстоўваць функцыю група().

Замена часткі тэксту на бібліятэку Re

Для замены тэксту выкарыстоўвайце функцыю re.sub(). Выкажам здагадку, наш спіс курсаў крыху змяніўся. Мы бачым, што пасля кожнага лічбавага значэння ў нас ёсць табуляцыя. Наша задача - аб'яднаць усю гэтую паслядоўнасць у адну лінію. Для гэтага нам трэба замяніць выраз s+ прайсці 

Арыгінальны тэкст быў:

# стварыць зменную з тэкстам

>>> тэкст = “””100 INF t Інфарматыка

213 МАТ t Матэм  

156 ENG t англійская»»»  

>>> друк (тэкст)  

100 ІНФАРМАЦЫЯ інфарматыка

213 XNUMX XNUMX MAT Матэматыка  

156 ENG Ангельская

Каб выканаць патрэбную аперацыю, мы выкарыстоўвалі наступныя радкі кода.

# замяніць адзін або некалькі прабелаў на 1

>>> рэгулярны выраз = re.compile('s+')  

>>> print(regex.sub(' ', тэкст))  

У выніку маем адну лінію. 

101 COM Computers 205 MAT Матэматыка 189 ENG Англійская

А цяпер разгледзім іншую праблему. Перад намі не стаіць задача паставіць прабелы. Для нас значна важней, каб усе назвы курсаў пачыналіся з новага радка. Для гэтага выкарыстоўваецца іншы выраз, які дадае новы радок да выключэння. Што гэта за выраз?

Бібліятэка Re падтрымлівае такую ​​функцыю, як адмоўнае адпаведнасць. Ад прамога ён адрозніваецца тым, што перад касой рысай змяшчае клічнік. Гэта значыць, калі нам трэба прапусціць сімвал новага радка, то нам трэба напісаць !n замест n.

Атрымліваем наступны код.

# выдаліць усе прабелы, акрамя новага радка  

>>> рэгулярны выраз = re.compile('((?!n)s+)')  

>>> print(regex.sub(' ', тэкст))  

100 ИНФ Інфарматыка

213 МАТ Матэматыка  

156 ENG Англійская

Што такое групы рэгулярных выразаў?

З дапамогай груп рэгулярных выразаў мы можам атрымаць патрэбныя аб'екты ў выглядзе асобных элементаў, а не ў адзін радок. 

Дапусцім, нам трэба атрымаць нумар курса, код і назву не ў адным радку, а асобнымі элементамі. Каб выканаць заданне, вам спатрэбіцца напісаць велізарная колькасць непатрэбных радкоў кода. 

На самай справе задачу можна значна спрасціць. Вы можаце скласці шаблон для ўсіх запісаў і проста ўказаць дадзеныя, якія вам трэба атрымаць з дужак.

Будзе вельмі малая колькасць радкоў. 

# стварайце групы тэкставых шаблонаў курсаў і здабывайце іх

>>> шаблон_курсу = '([0-9]+)s*([A-ZY]{3})s*([a-zA-ZoY]{4,})'  

>>> re.findall(шаблон_курсу, тэкст)  

[('100', 'INF', 'Інфарматыка'), ('213', 'MAT', 'Math'), ('156', 'ENG', 'Англійская')]

Паняцце «прагнага» супастаўлення

Па стандарту рэгулярныя выразы запраграмаваны на выманне максімальнай колькасці адпаведных даных. І нават калі трэба значна менш.

Давайце паглядзім на прыклад HTML-кода, дзе нам трэба атрымаць тэг.

>>> тэкст = “Прыклад супастаўлення прагных рэгулярных выразаў”  

>>> re.findall('', тэкст)  

['Прыклад супастаўлення прагных рэгулярных выразаў']

Замест таго, каб здабываць толькі адзін тэг, Python атрымаў увесь радок. Таму яго і называюць прагным.

А што рабіць, каб атрымаць толькі тэг? У гэтым выпадку вам трэба выкарыстоўваць лянівы супастаўленне. Для ўдакладнення такога выразу ў канцы шаблона дадаецца пытальнік.

Вы атрымаеце наступны код і выхад інтэрпрэтатара.

>>> re.findall('', тэкст)  

[”, ”]

Калі патрабуецца атрымаць толькі першае сустрэтае ўваходжанне, то выкарыстоўваецца метад пошук ().

re.search('', тэкст).group()  

"

Тады будзе знойдзены толькі адкрывальны тэг.

Папулярныя шаблоны выразаў

Вось табліца, якая змяшчае найбольш часта выкарыстоўваюцца шаблоны рэгулярных выразаў.

Дакументацыя для модуля Re для Python 3 у . Re модуль для рэгулярных выразаў

заключэнне

Мы разгледзелі толькі самыя асноўныя метады працы з рэгулярнымі выразамі. У любым выпадку, вы бачылі, наколькі яны важныя. І тут не мае значэння, ці трэба аналізаваць увесь тэкст або асобныя яго фрагменты, ці трэба аналізаваць пост у сацыяльнай сетцы або збіраць дадзеныя, каб потым іх апрацаваць. Рэгулярныя выразы - надзейны памочнік у гэтай справе.

Яны дазваляюць выконваць такія задачы, як:

  1. Указанне фармату даных, напрыклад адраса электроннай пошты ці нумара тэлефона.
  2. Атрыманне радка і раздзяленне яго на некалькі меншых радкоў.
  3. Выкананне розных аперацый з тэкстам, такіх як пошук, выманне неабходнай інфармацыі або замена часткі знакаў.

Рэгулярныя выразы таксама дазваляюць выконваць нетрывіяльныя аперацыі. На першы погляд, авалодаць гэтай навукай няпроста. Але на практыцы ўсё стандартызавана, таму дастаткова адзін раз разабрацца, пасля чаго гэты інструмент можна выкарыстоўваць не толькі ў Python, але і ў любой іншай мове праграмавання. Нават Excel выкарыстоўвае рэгулярныя выразы для аўтаматызацыі апрацоўкі дадзеных. Так што грэх не скарыстацца гэтым сродкам.

Пакінуць каментар