Iespējams, jūs jau zināt, kā meklēt tekstu, nospiežot ctrl-F un ierakstot meklētos vārdus. Regulārās izteiksmes iet vēl vienu soli tālāk: tās ļauj norādīt meklējamā teksta modeli. Šajā rakstā mēs redzēsim, kā Python modeļu atbilstība darbojas ar Regex.
Regex programmā Python
Regulāras izteiksmes , ko sauc arī par regex , ir teksta modeļa apraksti. Tas var noteikt teksta esamību vai neesamību, saskaņojot to ar noteiktu rakstu, kā arī var sadalīt rakstu vienā vai vairākos apakšmoteros. Piemēram, a d regulārajā izteiksmē apzīmē ciparu rakstzīmi, tas ir, jebkuru atsevišķu ciparu no 0 līdz 9.
Pārbaudiet tālruņu numurus, izmantojot Regex programmā Python
Tiek izmantots šāds regex Python lai saskaņotu trīs skaitļu virkni, defisi, vēl trīs skaitļus, vēl vienu defisi un četrus skaitļus.
Any other string would not match the pattern. ddd-ddd-dddd>
Regulārās izteiksmes var būt daudz sarežģītākas. Piemēram, 3 pievienošana cirtainajās iekavās ({3}) pēc raksta ir kā teikt: “Saskaņojiet šo modeli trīs reizes”. Tātad nedaudz īsākais regex ir šāds:
c# apmācība
d{3}-d{3}-d{4}> Tas atbilst pareizajam tālruņa numura formātam.
Rakstu saskaņošana ar regulārām izteiksmēm
Regex objekts Meklēt() metode meklē virkni, kas tiek nodota, lai atrastu atbilstību regulārajam izteiksmei. Atbilstības objektiem ir grupa() metode, kas atgriezīs faktisko atbilstošo tekstu no meklētās virknes. Var arī redzētRegex cheetsheetlai iegūtu vairāk informācijas.
Piemērs: Importējiet regulārās izteiksmes moduli ar importēšanas re. Izveidojiet Regex objektu arre.compile()funkciju. (Neaizmirstiet izmantot neapstrādātu virkni.) Nododiet meklējamo virkni Regex objekta meklēšanas () metodei. Tas atgriež Match objektu. Izsauciet Match objekta grupu() metodi, lai atgrieztu faktiskā atbilstošā teksta virkni.
Python3
# Python program to illustrate> # Matching regex objects> import> re> > # regex object> phoneNumRegex>=> re.>compile>(r>'ddd-ddd-dddd'>)> mo>=> phoneNumRegex.search(>'My number is 415-555-4242.'>)> print>(>'Phone number found: '> +> mo.group())> |
>
>
Izvade:
Phone number found: 415-555-4242>
Iekavas grupēšanai un tveršanai, izmantojot Regex
Viens no veidiem, kā izveidot rakstu saskaņošanu ar Regex, ir izmantot iekavas ap rakstiem. Apskatīsim dažus dažādus piemērus labākai izpratnei.
Atbilstoši objekti
Pieņemsim, ka vēlaties atdalīt apgabala kodu no pārējā tālruņa numura. Pievienojot iekavas, regulārajā izteiksmē tiks izveidotas grupas: (ddd)-(ddd-dddd). Pēc tam varat izmantot group() atbilstības objekta metodi, lai satvertu atbilstošo tekstu tikai no vienas grupas.
Python3
import> re> phoneNumRegex>=> re.>compile>(r>'(ddd)-(ddd-dddd)'>)> mo>=> phoneNumRegex.search(>'My number is 415-555-4242.'>)> print>(mo.group(>1>))> areaCode, number>=> mo.groups()> print>(>'area code:'>, areaCode)> print>(>'number:'>, number)> |
>
>
Izvade:
415 area code: 415 number: 555-4242>
Vienlaicīgi izgūt visas grupas
Ja vēlaties izgūt visas grupas vienlaikus, izmantojiet metodi groups(), — ņemiet vērā nosaukuma daudzskaitļa formu.
Python3
import> re> phoneNumRegex>=> re.>compile>(r>'(ddd)-(ddd-dddd)'>)> mo>=> phoneNumRegex.search(>'My number is 415-555-4242.'>)> print>(mo.groups())> |
>
>
Izvade:
('415', '555-4242')> Saskaņojiet iekavas
Iekavām regulārajās izteiksmēs ir īpaša nozīme, bet ko darīt, ja tekstā ir jāatbilst iekavām. Piemēram, iespējams, tālruņu numuriem, kurus mēģināt saskaņot, iekavās ir iestatīts apgabala kods. Šajā gadījumā rakstzīmes ( un ) ir jāaizver ar atpakaļslīpssvītru. Interaktīvajā čaulā ievadiet:
Python3
import> re> phoneNumRegex>=> re.>compile>(r>'((ddd)) (ddd-dddd)'>)> mo>=> phoneNumRegex.search(>'My phone number is (415) 555-4242.'>)> print>(mo.group(>1>))> |
>
>
Izvade:
(415)>
Atsoļa rakstzīmes ( un ) neapstrādātajā virknē, kas tiek nodota re.compile() atbilst faktiskajām iekava rakstzīmēm.
Regulārās izteiksmes: grupēšana un cauruļu rakstzīme
The | raksturu sauc par pīpi. Mēs varam to izmantot visur, kur vēlamies, lai atbilstu kādai no daudzajām izteiksmēm.
Linux komandas
Piemērs: Regulārā izteiksme r'Batman|Tina Fey' atbildīs vai nu 'Betmens' vai 'Tīna Feja'. Kad meklētajā virknē ir gan Betmens, gan Tīna Feja, pirmais atbilstošā teksta gadījums tiks atgriezts kā atbilstības objekts.
Python3
# Python program to illustrate> # Matching regex objects> # with multiple Groups with the Pipe> import> re> heroRegex>=> re.>compile> (r>'Batman|Tina Fey'>)> mo1>=> heroRegex.search(>'Batman and Tina Fey.'>)> print>(mo1.group())> |
>
>
Izvade:
'Batman'>
Izpratne par cirtainajām lencēm regulārā izteiksmē
Ja mums ir grupa, kuru vēlamies atkārtot noteiktu skaitu reižu, sekojiet grupai regulārajā izteiksmē ar skaitli cirtainajās iekavās.
Piemēram, regulārais formulējums (Ha){3} atbildīs virknei “HaHaHa”, bet nesakritīs ar “HaHa”, jo pēdējam ir tikai divi (Ha) grupas atkārtojumi. Viena cipara vietā varat norādīt diapazonu starp cirtainajām iekavām. Regulārais formulējums (Ha){3, 5} atbildīs “HaHaHa”, “HaHaHaHa” un “HaHaHaHaHa”. Varat arī izlaist pirmo vai otro skaitli cirtainajās iekavās, lai atstātu minimālo vai maksimālo skaitli neierobežotu. (Ha){3, } atbildīs trim vai vairākiem (Ha) grupas gadījumiem, savukārt (Ha){, 5} atbildīs no nulles līdz pieciem gadījumiem. Cirtainas iekavas var palīdzēt saīsināt regulārās izteiksmes.
1. piemērs: Šajā piemērā mēs izmantosim cirtainas iekavas, lai norādītu meklētā raksta rašanos.
Python3
# Python program to illustrate> # Matching Specific Repetitions> # with Curly Brackets> import> re> haRegex>=> re.>compile>(r>'(Ha){3}'>)> mo1>=> haRegex.search(>'HaHaHa'>)> print>(mo1.group())> |
>
>
Izvade:
HaHaHa>
2. piemērs: Šajā piemērā mēs definēsim raksta rašanos, izmantojot cirtainas iekavas, un pēc tam meklēsim, vai tajā ir vai nav noteikts raksts.
Python3
# Python program to illustrate> # Matching Specific Repetitions> # with Curly Brackets> import> re> haRegex>=> re.>compile>(r>'(Ha){3}'>)> mo2>=> haRegex.search(>'Ha'>)>=>=> None> print>(mo2)> |
>
>
Izvade:
True>
Neobligāts operators vai jautājuma zīme (?) regulārajā izteiksmē
Dažreiz ir raksts, kuru vēlaties saskaņot tikai pēc izvēles. Tas nozīmē, ka regulārajam izteiksmei ir jāatrod atbilstība neatkarīgi no tā, vai šis teksta fragments ir vai nav. The ? rakstzīme atzīmē grupu, kas ir pirms tās, kā neobligātu modeļa daļu.
1. piemērs: Šeit mēs meklēsim modeli ar rakstu “Betmens” vai “Batwoman”. The (kur)? daļa no regulārās izteiksmes nozīmē, ka modelis wo ir neobligāta grupa. Regulārais formulējums atbildīs tekstam, kurā ir nulle gadījumu vai viens wo gadījums. Tāpēc regulārais izteiksmes veids atbilst gan “Batwoman”, gan “Batman”. Vai varat iedomāties? kā sakot, grupas Atbilst nullei vai vienai no grupām pirms šīs jautājuma zīmes.
Ja jums ir jāatbilst faktiskai jautājuma zīmes rakstzīmei, izņemiet to ar ?.
Python3
matricas c programmēšanā
# Python program to illustrate> # optional matching> # with question mark(?)> import> re> batRegex>=> re.>compile>(r>'Bat(wo)?man'>)> mo1>=> batRegex.search(>'The Adventures of Batman'>)> mo2>=> batRegex.search(>'The Adventures of Batwoman'>)> print>(mo1.group())> print>(mo2.group())> |
>
>
Izvade:
direktorija pārdēvēšana
Batman Batwoman>
Nulles vai vairāk raksta saskaņošana ar zvaigzni
* (saukta par zvaigznīti vai zvaigznīti) nozīmē atbilst nullei vai vairāk — grupa, kas atrodas pirms zvaigznes, tekstā var parādīties neierobežotu skaitu reižu. Tas var pilnībā nebūt vai atkārtot atkal un atkal. Ja jums ir jāatbilst faktiskai zvaigznītes rakstzīmei, regulārajā izteiksmē pievienojiet zvaigzni pirms slīpsvītras — *.
1. piemērs: Šajā piemērā mēs saskaņosim raksta nulles gadījumus virknē. Regulārā izteiksmes daļa (wo)* atbilst nullei wo gadījumiem virknē.
Python3
# Python program to illustrate> # matching a regular expression> # with asterisk(*)> import> re> batRegex>=> re.>compile>(r>'Bat(wo)*man'>)> mo1>=> batRegex.search(>'The Adventures of Batman'>)> print>(mo1.group())> |
>
>
Izvade:
Batman>
2. piemērs: Šajā piemērā mēs saskaņosim vismaz vienu parauga gadījumu virknē.
Python
#python program to illustrate> #matching a regular expression> #with asterisk(*)> import> re> batRegex>=> re.>compile>(r>'Bat(wo)*man'>)> mo2>=> batRegex.search(>'The Adventures of Batwoman'>)> print>(mo2.group())> |
>
>
Izvade:
Batwoman>
3. piemērs: Šajā piemērā mēs saskaņosim vairāk nekā vienu raksta gadījumu virknē.
Python
# Python program to illustrate> # matching a regular expression> # with asterisk(*)> import> re> batRegex>=> re.>compile>(r>'Bat(wo)*man'>)> mo3>=> batRegex.search(>'The Adventures of Batwowowowoman'>)> print>(mo3.group())> |
>
>
Izvade:
Batwowowowoman>
Viena vai vairāku modeļu saskaņošana ar plus
Kamēr * nozīmē atbilst nullei vai vairāk , + (vai plus) nozīmē atbilst vienam vai vairākiem. Atšķirībā no zvaigznītes, kuras grupai nav jāparādās saskaņotajā virknē, grupai pirms pluszīmes ir jāparādās vismaz vienu reizi. Tas nav obligāti. Ja jums ir jāatbilst faktiskai pluszīmes rakstzīmei, pievienojiet pluszīmei priekšā slīpsvītru, lai no tās atkāptos: +.
1. piemērs: Šajā piemērā mēs saskaņosim vismaz vienu parauga gadījumu virknē.
Python3
# Python program to illustrate> # matching a regular expression> # with plus(+)> import> re> batRegex>=> re.>compile>(r>'Bat(wo)+man'>)> mo1>=> batRegex.search(>'The Adventures of Batwoman'>)> print>(mo1.group())> |
>
>
Izvade:
Batwoman>
2. piemērs: Šajā piemērā regulārā izteiksme Bat(wo)+man neatbilst virknei “Betmena piedzīvojumi”, jo pluszīmei ir nepieciešams vismaz viens wo.
romiešu cipari 1100
Python
# Python program to illustrate> # matching a regular expression> # with plus(+)> import> re> batRegex>=> re.>compile>(r>'Bat(wo)+man'>)> mo3>=> batRegex.search(>'The Adventures of Batman'>)>=>=> None> print>(mo3)> |
>
>
Izvade:
True>
Saistīts raksts – Regex Cheetsheet