Dokumentazzjoni għall-modulu Re għal Python 3 fi . Re modulu għal espressjonijiet regolari

L-espressjonijiet regolari huma komponent popolari ħafna ta' kważi kull lingwa ta' programmar. Jgħinuk taċċessa malajr l-informazzjoni li għandek bżonn. B'mod partikolari, jintużaw meta jkun meħtieġ li jiġi pproċessat it-test. Python jiġi b'modulu speċjali awtomatikament. re, li hija responsabbli biex taħdem ma 'espressjonijiet regolari.

Illum se nitkellmu fid-dettall dwar x'inhi b'mod ġenerali, kif taħdem magħhom u kif il-modulu re se jgħin.

Espressjonijiet regolari: introduzzjoni

X'inhuma l-użi ta' espressjonijiet regolari? Kważi kollha. Per eżempju, dawn:

  1. Applikazzjonijiet tal-web li jeħtieġu validazzjoni tat-test. Eżempju tipiku huwa l-klijenti tal-posta onlajn.
  2. Kwalunkwe proġett ieħor relatat ma 'testi, databases u l-bqija.

Qabel ma nibdew nanalizzaw is-sintassi, għandna nifhmu f'aktar dettall il-prinċipji bażiċi tal-funzjonament tal-librerija re u b'mod ġenerali, x'inhu ġeneralment tajjeb dwarha. Se nagħtu wkoll eżempji minn prattika reali, fejn ser niddeskrivu l-mekkaniżmu tal-użu tagħhom. Tista 'toħloq tali mudell, adattat għalik biex twettaq varjetà wiesgħa ta' operazzjonijiet bit-test.

X'inhu mudell fil-librerija Re?

Magħha, tista 'tfittex informazzjoni ta' diversi tipi, tikseb informazzjoni li tikkorrispondi għalihom, sabiex tagħmel funzjonijiet oħra aktar adattivi. U, ovvjament, biex tipproċessa din id-dejta.

Per eżempju, ħu l-mudell li ġej: s+. Dan ifisser kull karattru spazjali. Jekk iżżid sinjal plus miegħu, allura dan ifisser li l-mudell jinkludi aktar minn spazju wieħed. Jista 'anki jqabbel karattri tat-tab li jissejħu bi t+.

Qabel ma tużahom, għandek bżonn timporta l-librerija Re. Wara dan, nużaw kmand speċjali biex niġbru l-mudell. Dan isir f'żewġ passi.

>>> importazzjoni mill-ġdid

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

Speċifikament, dan il-kodiċi jwettaq l-operazzjoni tal-kumpilazzjoni ta 'mudell li jista' jintuża. pereżempju, biex tfittex spazji (wieħed jew aktar).

Ikseb informazzjoni separata minn kordi differenti billi tuża espressjonijiet regolari

Ejja ngħidu li għandna varjabbli li fiha l-informazzjoni li ġejja.

>>> test = “””100 INF Informatika

213 Matematika MAT  

156 ENG Ingliż»»»

Fih tliet korsijiet ta’ taħriġ. Kull waħda minnhom tikkonsisti fi tliet partijiet - numru, kodiċi u isem. Naraw li l-intervall bejn dawn il-kliem huwa differenti. X'għandek tagħmel sabiex din il-linja tinqasam f'numri u kliem separati? Hemm żewġ metodi biex jintlaħaq dan il-għan:

  1. sejħa funzjoni mill-ġdid.
  2. japplikaw il-funzjoni maqsuma għall regex.

Hawn eżempju ta 'użu tas-sintassi ta' kull wieħed mill-metodi għall-varjabbli tagħna.

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

# jew

>>> regex.split(test)

Output: ['100', 'INF', 'Xjenza tal-Kompjuter', '213', 'MAT', 'Matematika', '156', 'ENG', 'Ingliż']

B'mod ġenerali, iż-żewġ metodi jistgħu jintużaw. Iżda fil-fatt huwa ħafna aktar faċli li tuża espressjoni regolari minflok tuża l-funzjoni diversi drabi. mill-ġdid.

Tfittxija taqbila bi tliet funzjonijiet

Ejja ngħidu li għandna bżonn estratt biss numri minn string. X'għandu jsir għal dan?

re.findall()

Hawnhekk huwa każ ta 'użu għall-funzjoni findall(), li, flimkien ma' espressjonijiet regolari, jippermettilek li tiġbed okkorrenzi ta' numri wieħed jew aktar minn varjabbli tat-test.

>>> print(test)  

100 INF Informatika

213 Matematika MAT  

156 ENG Ingliż

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

>>> regex_num.findall(test)  

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

Flimkien mas-simbolu d, użajna mudell li jindika assolutament kwalunkwe valur numeriku li jinsab f'varjabbli jew test. U peress li żidna wieħed + hemm, dan ifisser li mill-inqas numru wieħed irid ikun preżenti. 

Tista' wkoll tuża s-sinjal * biex tispeċifika li l-preżenza ta' ċifra mhix meħtieġa biex tinstab taqbila.

Imma fil-każ tagħna, peress li użajna +, estrajna bihom findall() Deżinjazzjoni diġitali waħda jew aktar ta' korsijiet mit-test. Għalhekk, fil-każ tagħna, espressjonijiet regolari jaġixxu bħala settings għall-funzjoni.

riċerka() vs re.match()

Kif tista 'raden mill-isem tal-funzjonijiet, l-ewwel tfittxijiet għal taqbila fit-test. Mistoqsija: X'inhi d-differenza bejn findall? Il-punt huwa li jirritorna oġġett speċifiku li jaqbel mal-mudell, u mhux is-sekwenza sħiħa ta 'riżultati misjuba fil-forma ta' lista, bħall-funzjoni preċedenti.

Min-naħa tagħha, il-funzjoni re.match tagħmel l-istess. Is-sintassi biss hija differenti. Il-mudell għandu jitqiegħed fil-bidu. 

Ejja nieħdu eżempju li juri dan.

>>> # oħloq varjabbli bit-test

>>> text2 = «»»INF Informatika

213 MAT Matematika 156″»»  

>>> # ikkumpila regex u fittex mudelli

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

>>> s = regex_num.search(test2)  

>>> print('L-ewwel indiċi: ', s.start())  

>>> print('L-aħħar indiċi: ', s.end())  

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

L-ewwel indiċi: 17 

L-aħħar indiċi: 20

213

Jekk trid tikseb riżultat simili b'mod differenti, tista 'tuża l-funzjoni grupp().

Tissostitwixxi parti mit-test bil-librerija Re

Biex tissostitwixxi t-test, uża l-funzjoni re.sub(). Ejja ngħidu li l-lista tagħna ta 'korsijiet inbidlet ftit. Naraw li wara kull valur diġitali għandna tab. Il-kompitu tagħna huwa li ngħaqqdu din is-sekwenza kollha f'linja waħda. Biex nagħmlu dan, għandna bżonn nissostitwixxu l-espressjoni s+ tgħaddi 

It-test oriġinali kien:

# oħloq varjabbli bit-test

>>> test = “””100 INF t Informatika

213 MAT t Matematika  

156 ENG t Ingliż»»»  

>>> print(test)  

100 INFORMAZZJONI Xjenza tal-kompjuter

213 MAT Matematika  

156 ENG Ingliż

Biex twettaq l-operazzjoni mixtieqa, użajna l-linji ta 'kodiċi li ġejjin.

# ibdel spazju wieħed jew aktar b'1

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

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

Bħala riżultat, għandna linja waħda. 

101 COM Computers 205 MAT Matematika 189 ENG Ingliż

Issa ikkunsidra problema oħra. M'aħniex iffaċċjati bil-kompitu li npoġġu l-ispazji. Huwa ferm aktar importanti għalina li l-ismijiet tal-korsijiet kollha jibdew fuq linja ġdida. Biex tagħmel dan, tintuża espressjoni oħra li żżid linja ġdida mal-eċċezzjoni. X'tip ta' espressjoni hija din?

Librerija Re jappoġġja karatteristika bħal tqabbil negattiv. Hija differenti minn dik diretta peress li fiha punt ta 'exclamation qabel il-linja mmejla. Jiġifieri, jekk irridu naqbżu l-karattru newline, allura għandna bżonn niktbu !n minflok n.

Nirċievu l-kodiċi li ġej.

# neħħi l-ispazji kollha ħlief il-linja ġdida  

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

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

100 INF Informatika

213 Matematika MAT  

156 ENG Ingliż

X'inhuma l-gruppi ta' espressjoni regolari?

Bl-għajnuna ta 'gruppi ta' espressjonijiet regolari, nistgħu niksbu l-oġġetti mixtieqa fil-forma ta 'elementi separati, u mhux f'linja waħda. 

Ejja ngħidu li għandna bżonn niksbu n-numru tal-kors, il-kodiċi u l-isem mhux f'linja waħda, iżda bħala elementi separati. Biex tlesti l-kompitu, ser ikollok bżonn tikteb numru kbir ta 'linji ta' kodiċi mhux meħtieġa. 

Fil-fatt, il-kompitu jista 'jiġi ssimplifikat ħafna. Tista' tiġbor il-mudell għall-entrati kollha u tispeċifika biss id-dejta li għandek bżonn tikseb mill-parentesi.

Se jkun hemm numru żgħir ħafna ta 'linji. 

# oħloq gruppi ta 'mudelli ta' test tal-kors u estratthom

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

>>> re.findall (mudell_kors, test)  

[('100', 'INF', 'Xjenza tal-Kompjuter'), ('213', 'MAT', 'Matematika'), ('156', 'ENG', 'Ingliż')]

Il-kunċett ta 'tqabbil "greedy".

Skont l-istandard, l-espressjonijiet regolari huma pprogrammati biex jiġu estratti l-ammont massimu ta' dejta ta' tqabbil. U anki jekk għandek bżonn ħafna inqas.

Ejja nħarsu lejn kampjun tal-kodiċi HTML fejn għandna bżonn niksbu t-tikketta.

>>> test = "Eżempju ta' Tqabbil ta' Espressjoni Regolari Greedy"  

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

['Eżempju ta' Tqabbil ta' Espressjoni Regolari Greedy']

Minflok estratt tikketta waħda biss, Python kiseb is-sekwenza kollha. Huwa għalhekk li jissejjaħ greedy.

U x'għandek tagħmel biex tikseb biss it-tikketta? F'dan il-każ, għandek bżonn tuża tqabbil għażżien. Biex tispeċifika tali espressjoni, jiġi miżjud marka ta 'mistoqsija fit-tarf tal-mudell.

Int ser tirċievi l-kodiċi li ġej u l-output tal-interpretu.

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

[”, ”]

Jekk ikun meħtieġ li tinkiseb biss l-ewwel okkorrenza li ltaqgħu magħhom, allura jintuża l-metodu tfittxija ().

ri.search('', test).grupp()  

"

Imbagħad tinstab biss it-tikketta tal-ftuħ.

Mudelli ta' Espressjoni Popolari

Hawnhekk hawn tabella li fiha l-mudelli ta' espressjoni regolari l-aktar użati b'mod komuni.

Dokumentazzjoni għall-modulu Re għal Python 3 fi . Re modulu għal espressjonijiet regolari

konklużjoni

Aħna ikkunsidrajna biss il-metodi l-aktar bażiċi biex naħdmu ma 'espressjonijiet regolari. Fi kwalunkwe każ, rajt kemm huma importanti. U hawn ma tagħmilx differenza jekk huwiex meħtieġ li t-test kollu jew il-frammenti individwali tiegħu jiġu analizzati, jekk huwiex meħtieġ li tiġi analizzata post fuq netwerk soċjali jew tinġabar data sabiex tiġi pproċessata aktar tard. L-espressjonijiet regolari huma helper affidabbli f'din il-kwistjoni.

Huma jippermettulek twettaq kompiti bħal:

  1. Tispeċifika l-format tad-dejta, bħal indirizz elettroniku jew numru tat-telefon.
  2. Ikseb spag u taqsamha f'diversi spag iżgħar.
  3. Wettaq operazzjonijiet varji bit-test, bħal tiftix, estrazzjoni tal-informazzjoni meħtieġa, jew sostituzzjoni ta 'parti mill-karattri.

L-espressjonijiet regolari jippermettu wkoll li twettaq operazzjonijiet mhux trivjali. L-ewwel daqqa t'għajn, il-ħakma ta 'din ix-xjenza mhix faċli. Iżda fil-prattika, kollox huwa standardizzat, għalhekk huwa biżżejjed li wieħed jifhem darba, u wara din l-għodda tista 'tintuża mhux biss f'Python, iżda wkoll fi kwalunkwe lingwa ta' programmar oħra. Anke Excel juża espressjonijiet regolari biex awtomat l-ipproċessar tad-dejta. Għalhekk huwa dnub li ma tużax din l-għodda.

Ħalli Irrispondi