Hati za moduli ya Re ya Python 3 in . Re moduli kwa misemo ya kawaida

Maneno ya kawaida ni sehemu maarufu sana ya karibu lugha yoyote ya programu. Wanakusaidia kupata taarifa unayohitaji kwa haraka. Hasa, hutumiwa wakati ni muhimu kusindika maandishi. Python inakuja na moduli maalum kwa chaguo-msingi. re, ambayo ni wajibu wa kufanya kazi na maneno ya kawaida.

Leo tutazungumza kwa undani juu ya ni nini kwa ujumla, jinsi ya kufanya kazi nao na jinsi moduli re itasaidia.

Maneno ya kawaida: utangulizi

Ni matumizi gani ya maneno ya kawaida? Karibu wote. Kwa mfano, hizi:

  1. Programu za wavuti zinazohitaji uthibitishaji wa maandishi. Mfano wa kawaida ni wateja wa barua pepe mtandaoni.
  2. Miradi mingine yoyote inayohusiana na maandishi, hifadhidata na kadhalika.

Kabla ya kuanza kuchanganua sintaksia, tunapaswa kuelewa kwa undani zaidi kanuni za msingi za utendakazi wa maktaba. re na kwa ujumla, nini ni nzuri kwa ujumla juu yake. Pia tutatoa mifano kutoka kwa mazoezi halisi, ambapo tutaelezea utaratibu wa matumizi yao. Unaweza kuunda kiolezo kama hicho, kinachofaa kwako kufanya shughuli nyingi na maandishi.

Ni kiolezo gani kwenye maktaba ya Re?

Pamoja nayo, unaweza kutafuta habari za aina anuwai, pata habari inayolingana nao, ili kufanya kazi zingine kubadilika zaidi. Na, bila shaka, kusindika data hii.

Kwa mfano, chukua kiolezo kifuatacho: s+. Inamaanisha tabia yoyote ya nafasi. Ikiwa unaongeza ishara zaidi kwake, basi hii ina maana kwamba muundo unajumuisha nafasi zaidi ya moja. Inaweza hata kulinganisha herufi za kichupo zinazoitwa nazo t+.

Kabla ya kuzitumia, unahitaji kuagiza maktaba Re. Baada ya hapo, tunatumia amri maalum ya kukusanya template. Hii inafanywa kwa hatua mbili.

>>> kuagiza tena

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

Hasa, msimbo huu hufanya uendeshaji wa kuandaa template ambayo inaweza kutumika. kwa mfano, kutafuta nafasi (moja au zaidi).

Kupata taarifa tofauti kutoka kwa mifuatano tofauti kwa kutumia misemo ya kawaida

Tuseme tunayo tofauti iliyo na habari ifuatayo.

>>> maandishi = “””Informatics 100 za INF

213 Hisabati ya MAT  

156 ENG Kiingereza»»»

Ina kozi tatu za mafunzo. Kila moja yao ina sehemu tatu - nambari, nambari na jina. Tunaona kwamba muda kati ya maneno haya ni tofauti. Nini cha kufanya ili kuvunja mstari huu kwa nambari na maneno tofauti? Kuna njia mbili za kufikia lengo hili:

  1. piga kazi kugawanyika tena.
  2. tumia kitendakazi kupasuliwa kwa regex.

Hapa kuna mfano wa kutumia syntax ya kila moja ya njia za utofauti wetu.

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

# au

>>> regex.split(maandishi)

Pato: ['100', 'INF', 'Sayansi ya Kompyuta', '213', 'MAT', 'Math', '156', 'ENG', 'English']

Kwa ujumla, njia zote mbili zinaweza kutumika. Lakini kwa kweli ni rahisi zaidi kutumia usemi wa kawaida badala ya kutumia kazi mara nyingi. kugawanyika tena.

Kutafuta mechi na vipengele vitatu

Wacha tuseme tunahitaji kutoa nambari tu kutoka kwa kamba. Nini kifanyike kwa hili?

re.findall()

Hapa kuna kesi ya utumiaji wa chaguo la kukokotoa findall(), ambayo, pamoja na maneno ya kawaida, hukuruhusu kutoa matukio ya nambari moja au zaidi kutoka kwa maandishi tofauti.

>>> chapisha (maandishi)  

Taarifa 100 za INF

213 Hisabati ya MAT  

156 ENG Kiingereza

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

>>> regex_num.findall(maandishi)  

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

Pamoja na alama ya d, tulitumia kiolezo kinachoonyesha thamani yoyote ya nambari iliyo katika kigezo au maandishi. Na kwa kuwa tuliongeza moja + hapo, hii ina maana kwamba angalau nambari moja lazima iwepo. 

Unaweza pia kutumia * ishara kubainisha kuwa uwepo wa tarakimu hauhitajiki ili mechi ipatikane.

Lakini kwa upande wetu, kwa kuwa tulitumia +, tulitoa na findall() Uteuzi 1 au zaidi wa kidijitali wa kozi kutoka kwa maandishi. Kwa hivyo, kwa upande wetu, misemo ya kawaida hufanya kama mipangilio ya kazi.

re.search() dhidi ya re.match()

Kama unavyoweza kukisia kutoka kwa jina la chaguo za kukokotoa, la kwanza hutafuta zinazolingana katika maandishi. Swali: Kuna tofauti gani kati ya findall? Jambo ni kwamba inarudisha kitu maalum kinacholingana na muundo, na sio mlolongo mzima wa matokeo yaliyopatikana katika mfumo wa orodha, kama chaguo la kukokotoa la awali.

Kwa upande wake, kitendakazi cha re.match hufanya vivyo hivyo. Sintaksia pekee ndiyo tofauti. Template lazima iwekwe mwanzoni. 

Hebu tuchukue mfano unaoonyesha hili.

>>> # tengeneza kigezo kwa maandishi

>>> text2 = «»»Informatics za INF

213 MAT Hisabati 156″»»  

>>> # kusanya regex na utafute ruwaza

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

>>> s = regex_num.search(text2)  

>>> chapisha('Faharisi ya kwanza: ', s.start())  

>>> chapisha('Faharisi ya mwisho: ', s.end())  

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

Fahirisi ya kwanza: 17 

Kiashiria cha mwisho: 20

213

Ikiwa unataka kupata matokeo sawa kwa njia tofauti, unaweza kutumia kazi kikundi ().

Kubadilisha sehemu ya maandishi na maktaba ya Re

Ili kubadilisha maandishi, tumia chaguo la kukokotoa re.sub(). Tuseme orodha yetu ya kozi imebadilika kidogo. Tunaona kwamba baada ya kila thamani ya dijiti tuna kichupo. Kazi yetu ni kuchanganya mlolongo huu wote katika mstari mmoja. Ili kufanya hivyo, tunahitaji kubadilisha usemi s+ kupita 

Maandishi asilia yalikuwa:

# tengeneza kibadilishaji na maandishi

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

213 MAT t Hisabati  

156 ENG t Kiingereza»»»  

>>> chapisha (maandishi)  

100 MAELEZO Kompyuta

213 MAT Hisabati  

156 ENG Kiingereza

Ili kufanya operesheni inayotaka, tulitumia mistari ifuatayo ya nambari.

# badilisha nafasi moja au zaidi na 1

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

>>> chapisha(regex.sub(' ', maandishi))  

Matokeo yake, tuna mstari mmoja. 

101 Kompyuta za COM 205 Hisabati za MAT 189 ENG Kiingereza

Sasa fikiria tatizo lingine. Hatujakabiliwa na kazi ya kuweka nafasi. Ni muhimu zaidi kwetu kwamba majina yote ya kozi huanza kwenye mstari mpya. Ili kufanya hivyo, usemi mwingine hutumiwa ambao unaongeza laini mpya kwa ubaguzi. Huu ni usemi wa aina gani?

maktaba Re inasaidia kipengele kama vile ulinganishaji hasi. Inatofautiana na ile ya moja kwa moja kwa kuwa ina alama ya mshangao kabla ya kufyeka. Hiyo ni, ikiwa tunahitaji kuruka herufi mpya, basi tunahitaji kuandika !n badala ya n.

Tunapata nambari ifuatayo.

# ondoa nafasi zote isipokuwa laini mpya  

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

>>> chapisha(regex.sub(' ', maandishi))  

Taarifa 100 za INF

213 Hisabati ya MAT  

156 ENG Kiingereza

Vikundi vya kujieleza vya kawaida ni vipi?

Kwa msaada wa makundi ya maneno ya kawaida, tunaweza kupata vitu vinavyohitajika kwa namna ya vipengele tofauti, na si kwa mstari mmoja. 

Tuseme tunahitaji kupata nambari ya kozi, nambari na jina sio kwenye mstari mmoja, lakini kama vitu tofauti. Ili kukamilisha kazi, utahitaji kuandika idadi kubwa ya mistari isiyo ya lazima ya nambari. 

Kwa kweli, kazi inaweza kurahisishwa sana. Unaweza kukusanya kiolezo cha maingizo yote na ueleze tu data unayohitaji kupata kutoka kwa mabano.

Kutakuwa na idadi ndogo sana ya mistari. 

# tengeneza vikundi vya templeti za maandishi na uzitoe

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

>>> pata tena(muundo wa_kozi, maandishi)  

[('100', 'INF', 'Sayansi ya Kompyuta'), ('213', 'MAT', 'Math'), ('156', 'ENG', 'English')]

Dhana ya "choyo" vinavyolingana

Kwa kawaida, misemo ya kawaida imepangwa ili kutoa kiwango cha juu cha data inayolingana. Na hata ikiwa unahitaji kidogo zaidi.

Hebu tuangalie sampuli ya msimbo wa HTML ambapo tunahitaji kupata lebo.

>>> maandishi = "Mfano wa Ulinganishaji wa Maonyesho ya Mara kwa Mara ya Uchoyo"  

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

['Mfano wa Ulinganifu wa Mara kwa Mara wa Uchoyo']

Badala ya kutoa lebo moja tu, Python alipata kamba nzima. Ndiyo maana inaitwa pupa.

Na nini cha kufanya ili kupata lebo tu? Katika kesi hii, unahitaji kutumia uvivu unaofanana. Ili kutaja usemi kama huo, alama ya swali huongezwa hadi mwisho wa muundo.

Utapata nambari ifuatayo na matokeo ya mkalimani.

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

[", ”]

Ikiwa inatakiwa kupata tu tukio la kwanza lililokutana, basi njia hutumiwa tafuta ().

tafuta upya('', text).group()  

"

Kisha tu tag ya ufunguzi itapatikana.

Violezo Maarufu vya Kujieleza

Hapa kuna jedwali lililo na mifumo ya usemi inayotumika sana.

Hati za moduli ya Re ya Python 3 in . Re moduli kwa misemo ya kawaida

Hitimisho

Tumezingatia njia za msingi tu za kufanya kazi na misemo ya kawaida. Kwa hali yoyote, umeona jinsi wao ni muhimu. Na hapa haifanyi tofauti ikiwa ni muhimu kuchanganua maandishi yote au vipande vyake vya kibinafsi, ikiwa ni muhimu kuchambua chapisho kwenye mtandao wa kijamii au kukusanya data ili kuishughulikia baadaye. Maneno ya kawaida ni msaidizi wa kuaminika katika suala hili.

Wanakuruhusu kufanya kazi kama vile:

  1. Inabainisha umbizo la data, kama vile anwani ya barua pepe au nambari ya simu.
  2. Kupata kamba na kuigawanya katika nyuzi kadhaa ndogo.
  3. Tekeleza utendakazi mbalimbali kwa maandishi, kama vile kutafuta, kutoa taarifa muhimu, au kubadilisha sehemu ya wahusika.

Maneno ya kawaida pia hukuruhusu kufanya shughuli zisizo za kawaida. Kwa mtazamo wa kwanza, kusimamia sayansi hii si rahisi. Lakini katika mazoezi, kila kitu ni sanifu, kwa hivyo inatosha kuhesabu mara moja, baada ya hapo chombo hiki kinaweza kutumika sio tu kwenye Python, bali pia katika lugha nyingine yoyote ya programu. Hata Excel hutumia misemo ya kawaida kuhariri usindikaji wa data. Kwa hivyo ni dhambi kutotumia zana hii.

Acha Reply