Dokumentasyon para sa Re module para sa Python 3 sa . Re module para sa regular nga mga ekspresyon

Ang mga regular nga ekspresyon usa ka popular nga bahin sa halos bisan unsang programming language. Gitabangan ka nila nga dali nga ma-access ang kasayuran nga imong gikinahanglan. Sa partikular, gigamit kini kung gikinahanglan ang pagproseso sa teksto. Ang Python adunay usa ka espesyal nga module nga default. re, nga maoy responsable sa pagtrabaho uban sa regular nga mga ekspresyon.

Karon kita makig-istorya sa detalye kon unsa kini sa kinatibuk-an, sa unsa nga paagi sa pagtrabaho uban kanila ug sa unsa nga paagi ang module re makatabang.

Regular nga mga ekspresyon: usa ka pasiuna

Unsa ang mga gamit sa regular nga mga ekspresyon? Halos tanan. Pananglitan, kini:

  1. Mga aplikasyon sa web nga nanginahanglan pag-validate sa teksto. Usa ka tipikal nga pananglitan mao ang mga kliyente sa online mail.
  2. Bisan unsang ubang mga proyekto nga may kalabotan sa mga teksto, database ug uban pa.

Sa dili pa kita magsugod sa pag-parse sa syntax, kinahanglan natong masabtan sa mas detalyado ang mga batakang prinsipyo sa pagpaandar sa librarya re ug sa kinatibuk-an, unsa ang kasagaran nga maayo bahin niini. Maghatag usab kami og mga pananglitan gikan sa tinuod nga praktis, diin among ihulagway ang mekanismo sa ilang paggamit. Makahimo ka sa ingon nga usa ka template, nga angay alang kanimo sa paghimo sa usa ka halapad nga lainlaing mga operasyon nga adunay teksto.

Unsa ang usa ka template sa Re library?

Uban niini, mahimo nimong pangitaon ang kasayuran sa lainlaing mga lahi, pagkuha kasayuran nga katumbas sa kanila, aron mahimo ang ubang mga gimbuhaton nga labi ka mapahiangay. Ug, siyempre, sa pagproseso niini nga data.

Pananglitan, kuhaa ang mosunod nga template: s+. Nagpasabot kini sa bisan unsang karakter sa kawanangan. Kung magdugang ka usa ka dugang nga timaan niini, nan kini nagpasabut nga ang sumbanan naglakip sa labaw pa sa usa ka wanang. Mahimo pa gani kini nga motakdo sa mga karakter sa tab nga gitawag uban t+.

Sa dili pa gamiton kini, kinahanglan nimo nga i-import ang librarya Re. Pagkahuman niana, mogamit kami usa ka espesyal nga mando aron makolekta ang template. Gihimo kini sa duha ka lakang.

>>> import pag-usab

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

Sa piho, kini nga code naghimo sa operasyon sa pag-compile sa usa ka template nga magamit. pananglitan, sa pagpangita sa mga luna (usa o daghan pa).

Pagkuha og bulag nga impormasyon gikan sa lain-laing mga string gamit ang regular nga mga ekspresyon

Ibutang ta nga kita adunay usa ka variable nga naglangkob sa mosunod nga impormasyon.

>>> text = “””100 INF Informatics

213 MAT Matematika  

156 HINGPIT English»»»

Naglangkob kini og tulo ka kurso sa pagbansay. Ang matag usa niini naglangkob sa tulo ka bahin - numero, code ug ngalan. Atong makita nga ang gilay-on tali niini nga mga pulong lahi. Unsa ang buhaton aron maputol kini nga linya sa lainlaing mga numero ug mga pulong? Adunay duha ka mga paagi aron makab-ot kini nga katuyoan:

  1. tawag ug function re.split.
  2. magamit ang function split alang sa regex.

Ania ang usa ka pananglitan sa paggamit sa syntax sa matag usa sa mga pamaagi alang sa among variable.

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

# o

>>> regex.split(teksto)

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

Sa kinatibuk-an, ang duha nga mga pamaagi mahimong magamit. Apan mas sayon ​​​​ang paggamit sa usa ka regular nga ekspresyon imbes nga gamiton ang function sa daghang mga higayon. re.split.

Pagpangita mga posporo nga adunay tulo nga mga gimbuhaton

Ingnon ta nga kinahanglan natong kuhaon ang mga numero lamang gikan sa usa ka hilo. Unsa ang kinahanglan nga buhaton alang niini?

re.findall()

Ania ang usa ka kaso sa paggamit alang sa function pagpangita (), nga, uban sa regular nga mga ekspresyon, nagtugot kanimo sa pagkuha sa mga panghitabo sa usa o daghang mga numero gikan sa usa ka text variable.

>>> print(teksto)  

100 INF Informatics

213 MAT Matematika  

156 HUB Iningles

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

>>> regex_num.findall(teksto)  

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

Uban sa d nga simbolo, migamit kami ug template nga nagpakita sa hingpit nga bisan unsang numeric value nga nahimutang sa usa ka variable o text. Ug tungod kay gidugang namon ang usa + didto, kini nagpasabut nga labing menos usa ka numero ang kinahanglan naa. 

Mahimo usab nimo nga gamiton ang * nga timaan aron mahibal-an nga ang presensya sa usa ka digit dili kinahanglan aron makit-an ang usa ka posporo.

Apan sa among kaso, tungod kay gigamit namon ang +, gikuha namon ang pagpangita () 1 o daghan pa nga digital nga mga ngalan sa mga kurso gikan sa teksto. Busa, sa among kaso, ang mga regular nga ekspresyon naglihok isip mga setting alang sa function.

re.search() vs re.match()

Sama sa imong matag-an gikan sa ngalan sa mga gimbuhaton, ang una nga pagpangita alang sa usa ka tugma sa teksto. Pangutana: Unsa ang kalainan tali sa pagpangita? Ang punto mao nga kini nagbalik sa usa ka piho nga butang nga mohaum sa sumbanan, ug dili ang tibuok han-ay sa mga resulta nga nakit-an sa porma sa usa ka lista, sama sa miaging function.

Sa baylo, ang re.match function nagbuhat sa sama. Lahi ra ang syntax. Ang template kinahanglan ibutang sa sinugdanan. 

Atong kuhaon ang usa ka pananglitan nga nagpakita niini.

>>> # paghimo ug variable nga adunay teksto

>>> text2 = «»»INF Informatics

213 MAT Matematika 156″»»  

>>> # compile regex ug pangitaa ang mga pattern

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

>>> s = regex_num.search(text2)  

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

>>> print('Katapusang indeks: ', s.end())  

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

Unang indeks: 17 

Katapusan nga indeks: 20

213

Kung gusto nimo makuha ang parehas nga resulta sa lahi nga paagi, mahimo nimong gamiton ang function grupo().

Pag-ilis sa bahin sa teksto sa Re library

Aron ilisan ang teksto, gamita ang function re.sub(). Ibutang ta nga ang among listahan sa mga kurso nausab og gamay. Nakita namon nga pagkahuman sa matag digital nga kantidad kami adunay usa ka tab. Ang among tahas mao ang paghiusa sa tanan niini nga han-ay sa usa ka linya. Aron mahimo kini, kinahanglan natong ilisan ang ekspresyong s+ sa paglabay 

Ang orihinal nga teksto mao ang:

# paghimo usa ka variable nga adunay teksto

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

213 MAT t Math  

156 HUB sa Iningles»»»  

>>> print(teksto)  

100 IMPORMASYON Siyensya sa kompyuter

213 MAT mathematics  

156 ENG Iningles

Aron mahimo ang gusto nga operasyon, gigamit namon ang mga mosunud nga linya sa code.

# pulihan ang usa o daghang mga wanang nga adunay 1

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

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

Ingon usa ka sangputanan, kami adunay usa ka linya. 

101 COM Computers 205 MAT Mathematics 189 ENG English

Karon tagda ang laing problema. Wala kami nag-atubang sa tahas sa pagbutang og mga luna. Mas hinungdanon alang kanamo nga ang tanan nga mga ngalan sa kurso magsugod sa usa ka bag-ong linya. Aron mahimo kini, gigamit ang lain nga ekspresyon nga nagdugang usa ka bag-ong linya sa eksepsiyon. Unsa kini nga matang sa ekspresyon?

Library Re nagsuporta sa usa ka bahin sama sa negatibo nga pagpares. Lahi kini sa direkta kay kini adunay usa ka exclamation point sa wala pa ang slash. Sa ato pa, kung kinahanglan natong laktawan ang karakter sa bag-ong linya, nan kinahanglan natong isulat ang !n imbes n.

Atong makuha ang mosunod nga code.

# kuhaa ang tanan nga mga wanang gawas sa bag-ong linya  

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

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

100 INF Informatics

213 MAT Matematika  

156 HUB Iningles

Unsa ang mga grupo sa regular nga ekspresyon?

Uban sa tabang sa mga grupo sa mga regular nga ekspresyon, mahimo natong makuha ang gitinguha nga mga butang sa porma sa bulag nga mga elemento, ug dili sa usa ka linya. 

Ibutang ta nga kinahanglan natong makuha ang numero sa kurso, kodigo ug ngalan dili sa usa ka linya, kondili ingong bulag nga mga elemento. Aron makompleto ang buluhaton, kinahanglan nimo nga isulat ang daghang dili kinahanglan nga mga linya sa code. 

Sa pagkatinuod, ang buluhaton mahimong mapayano pag-ayo. Mahimo nimong kolektahon ang template alang sa tanan nga mga entri ug ipiho ang datos nga kinahanglan nimo makuha gikan sa mga bracket.

Adunay gamay kaayo nga gidaghanon sa mga linya. 

# paghimo mga grupo sa mga template sa teksto sa kurso ug kuhaa kini

>>> 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 sa "kahakog" nga pagpares

Pinaagi sa sukaranan, ang mga regular nga ekspresyon giprograma aron makuha ang labing kadaghan nga katugbang nga datos. Ug bisan kung kinahanglan nimo ang labi ka gamay.

Atong tan-awon ang usa ka sample nga HTML code diin kinahanglan naton makuha ang tag.

>>> text = "Ehemplo sa Hakog nga Regular nga Pagpares sa Ekspresyon"  

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

['Ehemplo sa Hakog nga Regular nga Pagpares sa Ekspresyon']

Imbis nga makuha ang usa lang ka tag, nakuha ni Python ang tibuuk nga hilo. Mao nga gitawag kini nga hakog.

Ug unsa ang buhaton aron makuha ra ang tag? Sa kini nga kaso, kinahanglan nimo nga gamiton ang lazy matching. Aron matino ang ingon nga ekspresyon, usa ka marka sa pangutana ang idugang sa katapusan sa sumbanan.

Makuha nimo ang mosunod nga code ug ang output sa tighubad.

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

[", ”]

Kung gikinahanglan nga makuha lamang ang una nga nasugatan nga panghitabo, nan ang pamaagi gigamit pangitaa ().

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

"

Unya ang pangbukas nga tag lamang ang makit-an.

Popular nga Expression Templates

Ania ang usa ka lamesa nga adunay labing kasagarang gigamit nga mga pattern sa regular nga ekspresyon.

Dokumentasyon para sa Re module para sa Python 3 sa . Re module para sa regular nga mga ekspresyon

Panapos

Among gikonsiderar lamang ang labing sukaranan nga mga pamaagi sa pagtrabaho sa mga regular nga ekspresyon. Sa bisan unsang kaso, nakita nimo kung unsa sila ka hinungdanon. Ug dinhi wala’y kalainan kung kinahanglan ba nga i-parse ang tibuuk nga teksto o ang indibidwal nga mga tipik niini, kung kinahanglan ba nga analisahon ang usa ka post sa usa ka social network o pagkolekta mga datos aron maproseso kini sa ulahi. Ang regular nga mga ekspresyon maoy kasaligang katabang niining butanga.

Gitugotan ka nila sa paghimo sa mga buluhaton sama sa:

  1. Pagtino sa format sa data, sama sa email address o numero sa telepono.
  2. Pagkuha og hilo ug pagbahin niini ngadto sa pipila ka gagmay nga mga kuwerdas.
  3. Paghimo lain-laing mga operasyon uban sa teksto, sama sa pagpangita, pagkuha sa gikinahanglan nga impormasyon, o pag-ilis bahin sa mga karakter.

Gitugotan ka usab sa regular nga mga ekspresyon sa paghimo sa dili hinungdanon nga mga operasyon. Sa unang pagtan-aw, ang pag-master niini nga siyensya dili sayon. Apan sa praktis, ang tanan gi-standardize, mao nga igo na nga mahibal-an kini sa makausa, pagkahuman kini nga himan mahimong magamit dili lamang sa Python, kondili usab sa bisan unsang uban pang programming language. Bisan ang Excel naggamit sa mga regular nga ekspresyon aron ma-automate ang pagproseso sa datos. Busa usa ka sala ang dili paggamit niini nga himan.

Leave sa usa ka Reply