Dokumentasyon para sa Re module para sa Python 3 sa . Muling module para sa mga regular na expression

Ang mga regular na expression ay isang napaka-tanyag na bahagi ng halos anumang programming language. Tinutulungan ka nilang mabilis na ma-access ang impormasyong kailangan mo. Sa partikular, ginagamit ang mga ito kapag kinakailangan upang iproseso ang teksto. Ang Python ay may kasamang espesyal na module bilang default. re, na responsable para sa pagtatrabaho sa mga regular na expression.

Ngayon ay pag-uusapan natin nang detalyado kung ano ito sa pangkalahatan, kung paano magtrabaho sa kanila at kung paano ang module re Tutulungan.

Mga regular na expression: isang panimula

Ano ang mga gamit ng regular na expression? Halos lahat ng. Halimbawa, ang mga ito:

  1. Mga web application na nangangailangan ng text validation. Ang isang karaniwang halimbawa ay ang mga online na mail client.
  2. Anumang iba pang mga proyekto na nauugnay sa mga teksto, database at iba pa.

Bago natin simulan ang pag-parse ng syntax, dapat nating maunawaan nang mas detalyado ang mga pangunahing prinsipyo ng paggana ng library re at sa pangkalahatan, kung ano ang pangkalahatang mabuti tungkol dito. Magbibigay din kami ng mga halimbawa mula sa tunay na kasanayan, kung saan ilalarawan namin ang mekanismo ng kanilang paggamit. Maaari kang lumikha ng gayong template, na angkop para sa iyo na magsagawa ng iba't ibang uri ng mga operasyon gamit ang teksto.

Ano ang isang template sa Re library?

Sa pamamagitan nito, maaari kang maghanap ng iba't ibang uri ng impormasyon, makakuha ng impormasyong naaayon sa kanila, upang gawing mas adaptive ang iba pang mga function. At, siyempre, upang iproseso ang data na ito.

Halimbawa, kunin ang sumusunod na template: s+. Nangangahulugan ito ng anumang karakter sa espasyo. Kung magdagdag ka ng plus sign dito, nangangahulugan ito na ang pattern ay may kasamang higit sa isang espasyo. Maaari pa itong tumugma sa mga character ng tab na tinatawag na kasama t+.

Bago gamitin ang mga ito, kailangan mong i-import ang library Re. Pagkatapos nito, gumagamit kami ng isang espesyal na utos upang i-compile ang template. Ginagawa ito sa dalawang hakbang.

>>> import muli

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

Sa partikular, ang code na ito ay gumaganap ng operasyon ng pag-compile ng isang template na maaaring magamit. halimbawa, upang maghanap ng mga puwang (isa o higit pa).

Pagkuha ng hiwalay na impormasyon mula sa iba't ibang mga string gamit ang mga regular na expression

Ipagpalagay na mayroon tayong variable na naglalaman ng sumusunod na impormasyon.

>>> text = “””100 INF Informatics

213 MAT Matematika  

156 ENG Ingles»»»

Naglalaman ito ng tatlong kurso sa pagsasanay. Ang bawat isa sa kanila ay binubuo ng tatlong bahagi - numero, code at pangalan. Nakikita natin na iba ang pagitan ng mga salitang ito. Ano ang gagawin upang hatiin ang linyang ito sa magkakahiwalay na numero at salita? Mayroong dalawang paraan upang makamit ang layuning ito:

  1. tumawag sa isang function re.split.
  2. ilapat ang function pagsibak para regex.

Narito ang isang halimbawa ng paggamit ng syntax ng bawat isa sa mga pamamaraan para sa aming variable.

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

# o

>>> regex.split(text)

Output: ['100', 'INF', 'Computer Science', '213', 'MAT', 'Math', '156', 'ENG', 'English']

Sa pangkalahatan, maaaring gamitin ang parehong mga pamamaraan. Ngunit talagang mas madaling gumamit ng regular na expression sa halip na gamitin ang function nang maraming beses. re.split.

Paghahanap ng mga tugma na may tatlong function

Sabihin nating kailangan nating kunin ang mga numero lamang mula sa isang string. Ano ang kailangang gawin para dito?

re.findall()

Narito ang isang use case para sa function Hanapin lahat(), na, kasama ng mga regular na expression, ay nagbibigay-daan sa iyong kunin ang mga paglitaw ng isa o higit pang mga numero mula sa isang text variable.

>>> print(teksto)  

100 INF Informatics

213 MAT Matematika  

156 ENG Ingles

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

>>> regex_num.findall(text)  

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

Kasama ang d na simbolo, gumamit kami ng template na talagang nagsasaad ng anumang numeric na halaga na matatagpuan sa isang variable o text. At dahil nagdagdag kami ng isa + doon, nangangahulugan ito na dapat mayroong kahit isang numero. 

Maaari mo ring gamitin ang * sign upang tukuyin na ang pagkakaroon ng isang digit ay hindi kinakailangan para mahanap ang isang tugma.

Ngunit sa aming kaso, dahil ginamit namin ang +, kinuha namin ang Hanapin lahat() 1 o higit pang mga digital na pagtatalaga ng mga kurso mula sa teksto. Kaya, sa aming kaso, ang mga regular na expression ay nagsisilbing mga setting para sa function.

re.search() vs re.match()

Bilang maaari mong hulaan mula sa pangalan ng mga function, ang unang paghahanap para sa isang tugma sa teksto. Tanong: Ano ang pagkakaiba ng Hanapin lahat? Ang punto ay ibinabalik nito ang isang partikular na bagay na tumutugma sa pattern, at hindi ang buong pagkakasunud-sunod ng mga nahanap na resulta sa anyo ng isang listahan, tulad ng nakaraang function.

Kaugnay nito, ang re.match function ay ganoon din ang ginagawa. Syntax lang ang iba. Ang template ay dapat ilagay sa simula. 

Kumuha tayo ng isang halimbawa na nagpapakita nito.

>>> # lumikha ng variable na may text

>>> text2 = «»»INF Informatics

213 MAT Mathematics 156″»»  

>>> # mag-compile ng regex at maghanap ng mga pattern

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

>>> s = regex_num.search(text2)  

>>> print('Unang index: ', s.start())  

>>> print('Huling index: ', s.end())  

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

Unang index: 17 

Huling index: 20

213

Kung gusto mong makakuha ng katulad na resulta sa ibang paraan, maaari mong gamitin ang function pangkat().

Pinapalitan ang bahagi ng text ng Re library

Para palitan ang text, gamitin ang function re.sub(). Ipagpalagay na ang aming listahan ng mga kurso ay nagbago ng kaunti. Nakikita namin na pagkatapos ng bawat digital na halaga mayroon kaming isang tab. Ang aming gawain ay pagsamahin ang lahat ng sequence na ito sa isang linya. Para magawa ito, kailangan nating palitan ang expression na s+ ipasa 

Ang orihinal na teksto ay:

# gumawa ng variable na may text

>>> text = “””100 INF t Informatics

213 MAT t Math  

156 ENG t Ingles»»»  

>>> print(teksto)  

100 IMPORMASYON Agham sa computer

213 MAT Matematika  

156 ENG Ingles

Upang maisagawa ang nais na operasyon, ginamit namin ang mga sumusunod na linya ng code.

# palitan ang isa o higit pang mga puwang ng 1

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

>>> print(regex.sub(' ', text))  

Bilang resulta, mayroon kaming isang linya. 

101 COM Computers 205 MAT Mathematics 189 ENG English

Ngayon isaalang-alang ang isa pang problema. Hindi tayo nahaharap sa gawain ng paglalagay ng mga puwang. Mas mahalaga para sa amin na ang lahat ng pangalan ng kurso ay nagsisimula sa isang bagong linya. Upang gawin ito, ginagamit ang isa pang expression na nagdaragdag ng isang bagong linya sa pagbubukod. Anong klaseng expression ito?

Aklatan Re sumusuporta sa isang tampok tulad ng negatibong pagtutugma. Naiiba ito sa direktang isa dahil naglalaman ito ng tandang padamdam bago ang slash. Iyon ay, kung kailangan nating laktawan ang bagong linyang karakter, kailangan nating isulat ang !n sa halip na n.

Nakukuha namin ang sumusunod na code.

# alisin ang lahat ng puwang maliban sa newline  

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

>>> print(regex.sub(' ', text))  

100 INF Informatics

213 MAT Matematika  

156 ENG Ingles

Ano ang mga regular na expression group?

Sa tulong ng mga grupo ng mga regular na expression, maaari naming makuha ang ninanais na mga bagay sa anyo ng mga hiwalay na elemento, at hindi sa isang linya. 

Ipagpalagay na kailangan nating makuha ang numero ng kurso, code at pangalan hindi sa isang linya, ngunit bilang mga hiwalay na elemento. Upang makumpleto ang gawain, kakailanganin mong magsulat ng isang malaking bilang ng mga hindi kinakailangang linya ng code. 

Sa katunayan, ang gawain ay maaaring lubos na pinasimple. Maaari mong ipunin ang template para sa lahat ng mga entry at tukuyin lamang ang data na kailangan mong makuha mula sa mga bracket.

Magkakaroon ng napakaliit na bilang ng mga linya. 

# lumikha ng mga grupo ng mga template ng teksto ng kurso at i-extract ang mga ito

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

>>> re.findall(course_pattern, text)  

[('100', 'INF', 'Computer Science'), ('213', 'MAT', 'Math'), ('156', 'ENG', 'English')]

Ang konsepto ng "matakaw" na pagtutugma

Ayon sa pamantayan, ang mga regular na expression ay naka-program upang kunin ang maximum na dami ng tumutugmang data. At kahit na kailangan mo ng mas kaunti.

Tingnan natin ang isang sample na HTML code kung saan kailangan nating makuha ang tag.

>>> text = "Halimbawa ng Sakim na Regular na Pagtutugma ng Ekspresyon"  

>>> re.findall('', text)  

['Halimbawa ng Greedy Regular Expression Matching']

Sa halip na kumuha ng isang tag lang, nakuha ni Python ang buong string. Kaya naman ito ay tinatawag na gahaman.

At ano ang gagawin para makuha lang ang tag? Sa kasong ito, kailangan mong gumamit ng tamad na pagtutugma. Upang tukuyin ang gayong expression, isang tandang pananong ay idinagdag sa dulo ng pattern.

Makukuha mo ang sumusunod na code at ang output ng interpreter.

>>> re.findall('', text)  

[", ”]

Kung ito ay kinakailangan upang makuha lamang ang unang nakatagpo na pangyayari, pagkatapos ay ang paraan ay ginagamit maghanap ().

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

"

Pagkatapos ay ang pambungad na tag lamang ang mahahanap.

Mga Sikat na Expression Template

Narito ang isang talahanayan na naglalaman ng mga karaniwang ginagamit na pattern ng regular na expression.

Dokumentasyon para sa Re module para sa Python 3 sa . Muling module para sa mga regular na expression

Konklusyon

Isinaalang-alang lamang namin ang mga pinakapangunahing pamamaraan para sa pagtatrabaho sa mga regular na expression. Sa anumang kaso, nakita mo kung gaano sila kahalaga. At dito walang pagkakaiba kung kinakailangan na i-parse ang buong teksto o ang mga indibidwal na fragment nito, kung kinakailangan upang pag-aralan ang isang post sa isang social network o mangolekta ng data upang maproseso ito sa ibang pagkakataon. Ang mga regular na expression ay isang maaasahang katulong sa bagay na ito.

Pinapayagan ka nilang magsagawa ng mga gawain tulad ng:

  1. Pagtukoy sa format ng data, gaya ng email address o numero ng telepono.
  2. Pagkuha ng string at paghahati nito sa ilang mas maliliit na string.
  3. Magsagawa ng iba't ibang mga operasyon gamit ang teksto, tulad ng paghahanap, pagkuha ng kinakailangang impormasyon, o pagpapalit ng bahagi ng mga character.

Nagbibigay-daan din sa iyo ang mga regular na expression na magsagawa ng mga di-trivial na operasyon. Sa unang tingin, hindi madali ang pag-master ng agham na ito. Ngunit sa pagsasagawa, ang lahat ay na-standardize, kaya sapat na upang malaman ito nang isang beses, pagkatapos kung saan ang tool na ito ay maaaring gamitin hindi lamang sa Python, kundi pati na rin sa anumang iba pang programming language. Kahit na ang Excel ay gumagamit ng mga regular na expression upang i-automate ang pagproseso ng data. Kaya kasalanan na hindi gamitin ang tool na ito.

Mag-iwan ng Sagot