Werrej
- Espressjonijiet regolari: introduzzjoni
- Ikseb informazzjoni separata minn kordi differenti billi tuża espressjonijiet regolari
- Tfittxija taqbila bi tliet funzjonijiet
- Tissostitwixxi parti mit-test bil-librerija Re
- X'inhuma l-gruppi ta' espressjoni regolari?
- Il-kunċett ta 'tqabbil "greedy".
- Mudelli ta' Espressjoni Popolari
- konklużjoni
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:
- Applikazzjonijiet tal-web li jeħtieġu validazzjoni tat-test. Eżempju tipiku huwa l-klijenti tal-posta onlajn.
- 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:
- sejħa funzjoni mill-ġdid.
- 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.
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:
- Tispeċifika l-format tad-dejta, bħal indirizz elettroniku jew numru tat-telefon.
- Ikseb spag u taqsamha f'diversi spag iżgħar.
- 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.