Dokimantasyon pou modil Re pou Python 3 nan . Re modil pou ekspresyon regilye

Ekspresyon regilye yo se yon eleman trè popilè nan prèske nenpòt langaj pwogramasyon. Yo ede w jwenn aksè rapid nan enfòmasyon ou bezwen yo. An patikilye, yo itilize lè li nesesè pou trete tèks. Python vini ak yon modil espesyal pa default. re, ki responsab pou travay ak ekspresyon regilye.

Jodi a nou pral pale an detay sou sa li ye an jeneral, ki jan yo travay avèk yo ak ki jan modil la re ap ede.

Ekspresyon regilye: yon entwodiksyon

Ki itilizasyon ekspresyon regilye yo? Prèske tout. Pou egzanp, sa yo:

  1. Aplikasyon entènèt ki mande validation tèks. Yon egzanp tipik se kliyan lapòs sou entènèt.
  2. Nenpòt lòt pwojè ki gen rapò ak tèks, baz done ak sou sa.

Anvan nou kòmanse analize sentaks la, nou ta dwe konprann nan plis detay prensip debaz fonksyone bibliyotèk la. re ak an jeneral, sa ki jeneralman bon sou li. Nou pral tou bay egzanp nan pratik reyèl, kote nou pral dekri mekanis nan sèvi ak yo. Ou ka kreye tankou yon modèl, apwopriye pou ou fè yon gran varyete operasyon ak tèks.

Ki sa ki yon modèl nan bibliyotèk Re a?

Avèk li, ou ka chèche enfòmasyon divès kalite, jwenn enfòmasyon ki koresponn ak yo, yo nan lòd yo fè lòt fonksyon plis adaptasyon. Epi, nan kou, trete done sa yo.

Pou egzanp, pran modèl sa a: s+. Sa vle di nenpòt karaktè espas. Si ou ajoute yon siy plis nan li, Lè sa a, sa vle di ke modèl la gen ladann plis pase yon espas. Li ka menm matche ak karaktè tab ki rele ak t+.

Anvan ou sèvi ak yo, ou bezwen enpòte bibliyotèk la Re. Apre sa, nou itilize yon kòmand espesyal pou konpile modèl la. Sa a se fè nan de etap.

>>> enpòte re

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

Espesyalman, kòd sa a fè operasyon an nan konpile yon modèl ki ka itilize. pa egzanp, pou chèche espas (youn oswa plis).

Jwenn enfòmasyon separe ki soti nan diferan fisèl lè l sèvi avèk ekspresyon regilye

Sipoze nou gen yon varyab ki gen enfòmasyon sa yo.

>>> tèks = “””100 INF Enfòmatik

213 MAT Matematik  

156 ENG angle»»»

Li genyen twa kou fòmasyon. Chak nan yo konsiste de twa pati - nimewo, kòd ak non. Nou wè entèval ki genyen ant mo sa yo diferan. Kisa pou w fè pou w kase liy sa a an nimewo ak mo separe? Gen de metòd pou reyalize objektif sa a:

  1. rele yon fonksyon re.fann.
  2. aplike fonksyon fann pou regex.

Isit la se yon egzanp lè l sèvi avèk sentaks nan chak nan metòd yo pou varyab nou an.

>>> re.split('s+', tèks)  

# oswa

>>> regex.split (tèks)

Sòti: ['100', 'INF', 'Computer Science', '213', 'MAT', 'Math', '156', 'ENG', 'English']

An jeneral, tou de metòd yo ka itilize. Men, li aktyèlman pi fasil yo sèvi ak yon ekspresyon regilye olye pou yo itilize fonksyon an plizyè fwa. re.fann.

Jwenn alimèt ak twa fonksyon

Ann di nou bezwen ekstrè nimewo sèlman nan yon fisèl. Kisa ki dwe fèt pou sa?

re.findall()

Isit la se yon ka itilize pou fonksyon an findall (), ki, ansanm ak ekspresyon regilye, pèmèt ou ekstrè ensidan youn oswa plizyè nimewo ki soti nan yon varyab tèks.

>>> enprime (tèks)  

100 INF Enfòmatik

213 MAT Matematik  

156 ENG Angle

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

>>> regex_num.findall (tèks)  

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

Ansanm ak senbòl d la, nou itilize yon modèl ki endike absoliman nenpòt valè nimerik ki sitiye nan yon varyab oswa tèks. Epi depi nou te ajoute yon sèl + la, sa vle di ke omwen yon nimewo dwe prezan. 

Ou ka sèvi ak siy * la tou pou presize ke prezans yon chif pa obligatwa pou jwenn yon match.

Men, nan ka nou an, depi nou itilize +, nou ekstrè ak findall () 1 oswa plis deziyasyon dijital nan kou nan tèks la. Kidonk, nan ka nou an, ekspresyon regilye yo aji kòm anviwònman pou fonksyon an.

rechèch() vs re.match()

Kòm ou ka devine nan non an nan fonksyon yo, premye rechèch pou yon match nan tèks la. Kesyon: Ki diferans ki genyen ant findall? Pwen an se ke li retounen yon objè espesifik ki matche ak modèl la, epi li pa tout sekans rezilta yo jwenn nan fòm lan nan yon lis, tankou fonksyon anvan an.

Nan vire, fonksyon an re.match fè menm bagay la. Se sèlman sentaks la ki diferan. Modèl la dwe mete nan kòmansman an. 

Ann pran yon egzanp ki montre sa.

>>> # kreye yon varyab ak tèks

>>> text2 = «»»INF Enfòmatik

213 MAT Matematik 156″»»  

>>> # konpile regex epi chèche modèl

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

>>> s = regex_num.search(text2)  

>>> print('Premye endèks: ', s.start())  

>>> print('Dènye endèks: ', s.end())  

>>> enprime(tèks2[s.start():s.end()]) 

Premye endèks: 17 

Dènye endèks: 20

213

Si ou vle jwenn yon rezilta menm jan an nan yon fason diferan, ou ka itilize fonksyon an gwoup ().

Ranplase yon pati nan tèks ak bibliyotèk Re

Pou ranplase tèks, sèvi ak fonksyon an re.sub(). Sipoze lis kou nou an chanje yon ti kras. Nou wè ke apre chak valè dijital nou gen yon tab. Travay nou se konbine tout sekans sa a nan yon sèl liy. Pou fè sa, nou bezwen ranplase ekspresyon s+ pase 

Tèks orijinal la te:

# kreye yon varyab ak tèks

>>> tèks = “””100 INF t Enfòmatik

213 MAT t Matematik  

156 ENG t angle»»»  

>>> enprime (tèks)  

100 ENF .MASYON Syans konpitè

213 MAT Matematik  

156 ENG Frantz

Pou fè operasyon an vle, nou itilize liy sa yo nan kòd.

# ranplase youn oswa plizyè espas ak 1

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

>>> enprime (regex.sub(' ', tèks))  

Kòm yon rezilta, nou gen yon sèl liy. 

101 COM Computers 205 MAT Matematik 189 ENG Angle

Koulye a, konsidere yon lòt pwoblèm. Nou pa fè fas ak travay la mete espas. Li pi enpòtan pou nou ke tout non kou kòmanse sou yon nouvo liy. Pou fè sa, yo itilize yon lòt ekspresyon ki ajoute yon nouvo liy nan eksepsyon an. Ki kalite ekspresyon sa a?

Bibliyotèk Re sipòte yon karakteristik tankou matche negatif. Li diferan de dirèk la nan ke li gen yon pwen esklamasyon anvan koupe an. Sa vle di, si nou bezwen sote karaktè newline a, Lè sa a, nou bezwen ekri !n olye de n.

Nou jwenn kòd sa a.

# retire tout espas eksepte nouvo liy  

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

>>> enprime (regex.sub(' ', tèks))  

100 INF Enfòmatik

213 MAT Matematik  

156 ENG Angle

Ki gwoup ekspresyon regilye yo ye?

Avèk èd nan gwoup ekspresyon regilye, nou ka jwenn objè yo vle nan fòm lan nan eleman separe, epi yo pa nan yon sèl liy. 

Sipoze nou bezwen jwenn nimewo kou a, kòd ak non pa nan yon sèl liy, men kòm eleman separe. Pou konplete travay la, w ap bezwen ekri yon gwo kantite liy ki pa nesesè nan kòd. 

An reyalite, travay la ka senplifye anpil. Ou ka konpile modèl la pou tout antre epi jis presize done ou bezwen jwenn nan parantèz yo.

Pral gen yon ti kantite liy. 

# kreye gwoup nan kou modèl tèks epi ekstrè yo

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

>>> re.findall (modèl kou, tèks)  

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

Konsèp matche "visye".

Dapre estanda, ekspresyon regilye yo pwograme pou ekstrè kantite maksimòm done matche. E menm si ou bezwen anpil mwens.

Ann gade nan yon echantiyon kòd HTML kote nou bezwen jwenn tag la.

>>> tèks = "Egzanp Korespondans ekspresyon regilye visye"  

>>> re.findall('', tèks)  

['Egzanp Korespondans ekspresyon regilye visye']

Olye pou yo ekstrè yon sèl tag, Python te resevwa fisèl la tout antye. Se poutèt sa yo rele yo visye.

Ak sa pou w fè pou jwenn sèlman tag la? Nan ka sa a, ou bezwen sèvi ak matche parese. Pou presize yon ekspresyon konsa, yo ajoute yon mak kesyon nan fen modèl la.

Ou pral jwenn kòd sa a ak pwodiksyon entèprèt la.

>>> re.findall('', tèks)  

[”, ”]

Si li oblije jwenn sèlman premye ensidan an rankontre, Lè sa a, yo itilize metòd la rechèch ().

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

"

Lè sa a, sèlman tag ouvèti a pral jwenn.

Modèl ekspresyon popilè

Isit la se yon tablo ki gen modèl ekspresyon regilye ki pi souvan itilize yo.

Dokimantasyon pou modil Re pou Python 3 nan . Re modil pou ekspresyon regilye

konklizyon

Nou te konsidere sèlman metòd ki pi fondamantal pou travay ak ekspresyon regilye. Nan nenpòt ka, ou te wè ki jan enpòtan yo. Ak isit la li pa fè okenn diferans si li nesesè analize tèks la tout antye oswa fragman endividyèl li yo, si li nesesè analize yon pòs sou yon rezo sosyal oswa kolekte done yo nan lòd yo trete li pita. Ekspresyon regilye yo se yon èd serye nan zafè sa a.

Yo pèmèt ou fè travay tankou:

  1. Espesifye fòma done yo, tankou yon adrès imel oswa nimewo telefòn.
  2. Jwenn yon fisèl epi divize li an plizyè fisèl ki pi piti.
  3. Fè plizyè operasyon ak tèks, tankou rechèch, ekstrè enfòmasyon ki nesesè yo, oswa ranplase yon pati nan karaktè yo.

Ekspresyon regilye yo tou pèmèt ou fè operasyon ki pa trivial. Nan premye gade, metrize syans sa a pa fasil. Men, nan pratik, tout bagay estanda, kidonk li ase yo kalkile yon fwa, apre yo fin ki zouti sa a ka itilize pa sèlman nan Python, men tou, nan nenpòt lòt lang pwogramasyon. Menm Excel itilize ekspresyon regilye pou otomatize pwosesis done yo. Kidonk, se yon peche pa sèvi ak zouti sa a.

Kite yon Reply