A regulárny výraz alebo regulárny výraz je špeciálna sekvencia znakov, ktorá používa vyhľadávací vzor na nájdenie reťazca alebo množiny reťazcov.
Dokáže zistiť prítomnosť alebo neprítomnosť textu jeho priradením k určitému vzoru a tiež môže rozdeliť vzor do jedného alebo viacerých podvzorov.
Modul Regex v Pythone
Python má vstavaný modul s názvom re ktorý sa používa pre regulárne výrazy v Pythone. Tento modul môžeme importovať pomocou príkazu import .
Príklad: Import modulu re v Pythone
Python3
# importing re module> import> re> |
>
>
Ako používať RegEx v Pythone?
RegEx môžete použiť v Pythone po importovaní modulu re.
Príklad:
Tento kód Pythonu používa na vyhľadávanie slova regulárne výrazy portál v danom reťazci a potom vytlačí začiatočné a koncové indexy zhodného slova v rámci reťazca.
Python3
import> re> > s>=> 'techcodeview.com: A computer science portal for geeks'> > match>=> re.search(r>'portal'>, s)> > print>(>'Start Index:'>, match.start())> print>(>'End Index:'>, match.end())> |
>
>Výkon
Start Index: 34 End Index: 40>
Poznámka: Tu znak r (r’portal’) znamená raw, nie regex. Nespracovaný reťazec sa mierne líši od bežného reťazca, nebude interpretovať znak ako únikový znak. Je to preto, že modul regulárneho výrazu používa znak na svoj vlastný únikový účel.
Skôr než začneme s modulom regulárneho výrazu v Pythone, pozrime sa, ako skutočne napísať regulárny výraz pomocou metaznakov alebo špeciálnych sekvencií.
Metaznaky
Metaznaky sú znaky so špeciálnym významom.
Na pochopenie analógie RE sú metaznaky užitočné a dôležité. Budú použité vo funkciách modulu re. Nižšie je uvedený zoznam metaznakov.
| Metaznaky | Popis |
|---|---|
| Používa sa na odstránenie špeciálneho významu znaku, ktorý za ním nasleduje javafx | |
| [] | Predstavuje triedu postavy |
| ^ | Zodpovedá začiatku |
| $ | Zhoduje sa s koncom |
| . | Zodpovedá akémukoľvek znaku okrem nového riadku |
| | | Znamená ALEBO (Zhoduje sa s ktorýmkoľvek zo znakov, ktoré sú ním oddelené. |
| ? | Zodpovedá nule alebo jednému výskytu |
| * | Ľubovoľný počet výskytov (vrátane 0 výskytov) |
| + | Jeden alebo viac výskytov |
| {} | Označte počet výskytov predchádzajúceho regulárneho výrazu, ktorý sa má zhodovať. |
| () | Uzavrite skupinu Regex |
Poďme diskutovať o každom z týchto metaznakov podrobne:
1. – Opačná lomka
Opačná lomka () zabezpečuje, že sa so znakom nebude zaobchádzať špeciálnym spôsobom. Toto možno považovať za spôsob úniku pred metaznakmi.
Napríklad, ak chcete vyhľadať bodku(.) v reťazci, zistíte, že bodka(.) sa bude považovať za špeciálny znak, rovnako ako jeden z metaznakov (ako je uvedené v tabuľke vyššie). Takže v tomto prípade použijeme spätnú lomku() tesne pred bodkou(.), aby to stratilo svoju špecialitu. Pre lepšie pochopenie si pozrite nižšie uvedený príklad.
Príklad:
Prvé hľadanie ( re.search(r'.', s)> ) pri druhom vyhľadávaní zodpovedá ľubovoľnému znaku, nielen bodke ( re.search(r'.', s)> ) špecificky hľadá a zhoduje sa s dobovým charakterom.
Python3
import> re> > s>=> 'geeks.forgeeks'> > # without using> match>=> re.search(r>'.'>, s)> print>(match)> > # using> match>=> re.search(r>'.'>, s)> print>(match)> |
>
>Výkon
>
2. [] – Hranaté zátvorky
Hranaté zátvorky ([]) predstavujú triedu znakov skladajúcu sa zo sady znakov, ktoré chceme porovnať. Napríklad trieda znakov [abc] sa bude zhodovať s ľubovoľným a, b alebo c.
Rozsah znakov môžeme určiť aj pomocou – v hranatých zátvorkách. Napríklad,
- [0, 3] je vzorka ako [0123]
- [a-c] je rovnaké ako [abc]
Triedu znakov môžeme invertovať aj pomocou symbolu strieška (^). Napríklad,
- [^0-3] znamená akékoľvek číslo okrem 0, 1, 2 alebo 3
- [^a-c] znamená akýkoľvek znak okrem a, b alebo c
Príklad:
V tomto kóde používate regulárne výrazy na nájdenie všetkých znakov v reťazci, ktoré spadajú do rozsahu „a“ až „m“. The re.findall()> funkcia vráti zoznam všetkých takýchto znakov. V danom reťazci sú znaky, ktoré zodpovedajú tomuto vzoru: 'c', 'k', 'b', 'f', 'j', 'e', 'h', 'l', 'd', ' g'.
Python3
import> re> > string>=> 'The quick brown fox jumps over the lazy dog'> pattern>=> '[a-m]'> result>=> re.findall(pattern, string)> > print>(result)> |
>
>Výkon
['h', 'e', 'i', 'c', 'k', 'b', 'f', 'j', 'm', 'e', 'h', 'e', 'l', 'a', 'd', 'g']>
3. ^ – Strieška
Symbol strieška (^) sa zhoduje so začiatkom reťazca, t. j. kontroluje, či reťazec začína daným znakom (znakmi) alebo nie. Napríklad -
- ^g skontroluje, či reťazec začína na g, napríklad geeks, globe, girl, g atď.
- ^ge skontroluje, či reťazec začína na ge, napríklad geeks, geeksforgeeks atď.
Príklad:
Tento kód používa regulárne výrazy na kontrolu, či zoznam reťazcov začína na The . Ak reťazec začína na Je to označené ako zhodné inak je označený ako Nezhoduje sa.
Python3
import> re> regex>=> r>'^The'> strings>=> [>'The quick brown fox'>,>'The lazy dog'>,>'A quick brown fox'>]> for> string>in> strings:> >if> re.match(regex, string):> >print>(f>'Matched: {string}'>)> >else>:> >print>(f>'Not matched: {string}'>)> |
>
>Výkon
Matched: The quick brown fox Matched: The lazy dog Not matched: A quick brown fox>
4. $ – dolár
Symbol dolára ($) sa zhoduje s koncom reťazca, tj kontroluje, či reťazec končí daným znakom (znakmi) alebo nie. Napríklad-
- s$ skontroluje reťazec, ktorý končí znakom, ako sú geeks, ends, s atď.
- ks$ skontroluje reťazec, ktorý končí na ks, ako napríklad geeks, geeksforgeeks, ks atď.
Príklad:
Tento kód používa regulárny výraz na kontrolu, či reťazec končí na Svet!. Ak sa nájde zhoda, vytlačí sa Zhoda nájdená! v opačnom prípade sa vytlačí Zhoda sa nenašla .
Python3
import> re> > string>=> 'Hello World!'> pattern>=> r>'World!$'> > match>=> re.search(pattern, string)> if> match:> >print>(>'Match found!'>)> else>:> >print>(>'Match not found.'>)> |
>
>Výkon
Match found!>
5. – Bodka
Symbol bodka (.) sa zhoduje iba s jedným znakom okrem znaku nového riadku ( ). Napríklad -
- a.b skontroluje reťazec, ktorý obsahuje akýkoľvek znak na mieste bodky, ako napríklad acb, acbd, abbb atď.
- .. skontroluje, či reťazec obsahuje aspoň 2 znaky
Príklad:
Tento kód používa na vyhľadávanie vzoru regulárny výraz hnedá.líška v rámci reťazca. Bodka (.>) vo vzore predstavuje ľubovoľný znak. Ak sa nájde zhoda, vytlačí sa Zhoda nájdená! v opačnom prípade sa vytlačí Zhoda sa nenašla .
Python3
palindróm v Jave
import> re> > string>=> 'The quick brown fox jumps over the lazy dog.'> pattern>=> r>'brown.fox'> > match>=> re.search(pattern, string)> if> match:> >print>(>'Match found!'>)> else>:> >print>(>'Match not found.'>)> |
>
>Výkon
Match found!>
6. | – Or
Symbol alebo funguje ako operátor alebo, čo znamená, že kontroluje, či je vzor pred alebo za symbolom alebo prítomný v reťazci alebo nie. Napríklad -
- a|b sa bude zhodovať s ľubovoľným reťazcom, ktorý obsahuje a alebo b, ako napríklad acd, bcd, abcd atď.
7. ? - Otáznik
Otáznik (?) je kvantifikátor v regulárnych výrazoch, ktorý označuje, že predchádzajúci prvok by sa mal zhodovať nula alebo raz. Umožňuje vám určiť, že prvok je voliteľný, čo znamená, že sa môže vyskytnúť raz alebo vôbec. Napríklad,
- ab?c sa zhoduje s reťazcom ac, acb, dabc, ale nebude sa zhodovať s abbc, pretože existujú dve b. Podobne sa nezhoduje s abdc, pretože za b nenasleduje c.
8.* – Hviezda
Symbol hviezdičky (*) zodpovedá nule alebo viacerým výskytom regulárneho výrazu pred symbolom *. Napríklad -
- ab*c sa bude zhodovať s reťazcom ac, abc, abbbc, dabc atď., ale nebude sa zhodovať s abdc, pretože po b nenasleduje c.
9. + – Plus
Symbol plus (+) sa zhoduje s jedným alebo viacerými výskytmi regulárneho výrazu pred symbolom +. Napríklad -
- ab+c sa bude zhodovať s reťazcom abc, abbc, dabc, ale nebude sa zhodovať s reťazcom ac, abdc, pretože v ac nie je žiadne b a po b nenasleduje c v abdc.
10. {m, n} – Zložené zátvorky
Zložené zátvorky zodpovedajú všetkým opakovaniam predchádzajúcim regulárnemu výrazu od m do n vrátane. Napríklad -
- a{2, 4} sa zhoduje s reťazcom aaab, baaaac, gaad, ale nebude sa zhodovať s reťazcami ako abc, bc, pretože v oboch prípadoch existuje iba jedno a alebo žiadne a.
11. () – Skupina
Symbol skupiny sa používa na zoskupovanie podvzorov. Napríklad -
- (a|b)cd bude zodpovedať reťazcom ako acd, abcd, gacd atď.
Špeciálne sekvencie
Špeciálne sekvencie sa nezhodujú so skutočným znakom v reťazci, namiesto toho hovoria o konkrétnom mieste vo vyhľadávacom reťazci, kde sa musí zhoda vyskytnúť. Uľahčuje písanie bežne používaných vzorov.
Zoznam špeciálnych sekvencií
| Špeciálna sekvencia | Popis | Príklady | |
|---|---|---|---|
| A | Zhoduje sa, ak reťazec začína daným znakom | Aphor | pre geekov |
| pre svet | |||
| Zhoduje sa, či slovo začína alebo končí daným znakom. (reťazec) skontroluje začiatok slova a (reťazec) skontroluje koniec slova. | ge | geekov | |
| dostať | |||
| B | Je to opak , t. j. reťazec by nemal začínať ani končiť daným regulárnym výrazom. | Bge | spolu |
| kováčske dielo | |||
| d | Zhoduje sa s akoukoľvek desatinnou číslicou, je ekvivalentom nastavenej triedy [0-9] | d | 123 |
| preboha1 | |||
| D | Zodpovedá akémukoľvek nečíslicovému znaku, je ekvivalentom nastavenej triedy [^0-9] | D | geekov |
| geek1 | |||
| s | Zodpovedá akémukoľvek znaku medzery. | s | gee ks |
| pred nl a | |||
| S | Zodpovedá akémukoľvek znaku, ktorý nie je prázdny | S | a bd |
| a B C d | |||
| In | Zhoduje sa s akýmkoľvek alfanumerickým znakom, je to ekvivalent triedy [a-zA-Z0-9_]. | In | 123 |
| geeKs4 | |||
| IN | Zhoduje sa so všetkými nealfanumerickými znakmi. | IN | > $ |
| dať | |||
| S | Zodpovedá, ak reťazec končí daným regulárnym výrazom | ab | abcdab |
| bababa |
RegEx funkcie
re modul obsahuje veľa funkcie ktoré nám pomáhajú hľadať v reťazci zhodu.
Pozrime sa na rôzne funkcie poskytované týmto modulom na prácu s regulárnym výrazom v Pythone.
| Funkcia | Popis |
|---|---|
| re.findall() | nájde a vráti všetky zodpovedajúce výskyty v zozname |
| re.compile() | Regulárne výrazy sú zostavené do vzorových objektov |
| re.split() | Rozdelenie reťazca podľa výskytov znaku alebo vzoru. |
| re.sub() | Nahradí všetky výskyty znaku alebo vzoru náhradným reťazcom. |
| re.escape() | Uniká špeciálnemu charakteru |
| re.search() | Hľadá prvý výskyt znaku alebo vzoru |
Pozrime sa na fungovanie týchto funkcií RegEx s definíciou a príkladmi:
1. re.findall()
Vráti všetky neprekrývajúce sa zhody vzoru v reťazci ako zoznam reťazcov. Reťazec sa skenuje zľava doprava a zhody sa vrátia v nájdenom poradí.
Nájdenie všetkých výskytov vzoru
Tento kód používa regulárny výraz ( d+> ) nájsť všetky postupnosti jednej alebo viacerých číslic v danom reťazci. Vyhľadáva číselné hodnoty a ukladá ich do zoznamu. V tomto príklade nájde a vytlačí čísla 123456789 a 987654321 zo vstupného reťazca.
Python3
import> re> string>=> '''Hello my Number is 123456789 and> >my friend's number is 987654321'''> regex>=> 'd+'> > match>=> re.findall(regex, string)> print>(match)> |
ssh plná forma
>
>Výkon
['123456789', '987654321']>
2. re.compile()
Regulárne výrazy sú zostavené do vzorových objektov, ktoré majú metódy pre rôzne operácie, ako je vyhľadávanie zhôd so vzormi alebo vykonávanie nahrádzania reťazcov.
Príklad 1:
Kód používa vzor regulárneho výrazu [a-e]> nájsť a uviesť všetky malé písmená od „a“ po „e“ vo vstupnom reťazci Áno, povedal pán Gibenson Stark. Výstupom bude ['e', 'a', 'd', 'b', 'e']> , čo sú zodpovedajúce znaky.
Python
import> re> p>=> re.>compile>(>'[a-e]'>)> > print>(p.findall(>'Aye, said Mr. Gibenson Stark'>))> |
>
>Výkon
['e', 'a', 'd', 'b', 'e', 'a']>
Pochopenie výstupu:
- Prvý výskyt je „e“ v Aye a nie „A“, keďže sa rozlišujú malé a veľké písmená.
- Next Occurrence je „a“ v uvedenom, potom „d“ v uvedenom, nasledované „b“ a „e“ v Gibenson, posledné „a“ sa zhoduje so Starkom.
- Metaznaková spätná lomka „“ má veľmi dôležitú úlohu, pretože signalizuje rôzne sekvencie. Ak sa má použiť spätná lomka bez jej špeciálneho významu ako metaznaku, použite „“
Príklad 2: Nastaviť triedu [s,.] bude zodpovedať akémukoľvek znaku medzery, „,“ alebo, „.“.
Kód používa regulárne výrazy na nájdenie a zoznam všetkých jednotlivých číslic a postupností číslic v daných vstupných reťazcoch. Nájde jednotlivé číslice s d> a sekvencie číslic s d+> .
Python
import> re> p>=> re.>compile>(>'d'>)> print>(p.findall(>'I went to him at 11 A.M. on 4th July 1886'>))> > p>=> re.>compile>(>'d+'>)> print>(p.findall(>'I went to him at 11 A.M. on 4th July 1886'>))> |
>
>Výkon
['1', '1', '4', '1', '8', '8', '6'] ['11', '4', '1886']>
Príklad 3:
Kód používa regulárne výrazy na nájdenie a zoznam slovných znakov, sekvencií slovných znakov a neslovných znakov vo vstupných reťazcoch. Poskytuje zoznamy zodpovedajúcich znakov alebo sekvencií.
Python
import> re> > p>=> re.>compile>(>'w'>)> print>(p.findall(>'He said * in some_lang.'>))> > p>=> re.>compile>(>'w+'>)> print>(p.findall('I went to him at>11> A.M., he> said>*>*>*> in> some_language.'))> > p>=> re.>compile>(>'W'>)> print>(p.findall(>'he said *** in some_language.'>))> |
>
>Výkon
['H', 'e', 's', 'a', 'i', 'd', 'i', 'n', 's', 'o', 'm', 'e', '_', 'l', 'a', 'n', 'g'] ['I', 'went', 'to', 'him', 'at', '11', 'A', 'M', 'he', 'said', 'in', 'some_language'] [' ', ' ', '*', '*', '*', ' ...>
Príklad 4:
Kód používa vzor regulárneho výrazu „ab*“ na nájdenie a zoznam všetkých výskytov „ab“, po ktorých nasleduje nula alebo viac znakov „b“ vo vstupnom reťazci ababbaabbb. Vráti nasledujúci zoznam zhôd: [‘ab‘, ‚abb‘, ‚abbb‘].
Python
import> re> p>=> re.>compile>(>'ab*'>)> print>(p.findall(>'ababbaabbb'>))> |
>
ankita dave
>Výkon
['ab', 'abb', 'a', 'abbb']>
Pochopenie výstupu:
- Naše RE je ab*, ktoré „a“ sprevádza akékoľvek č. z „b“, počnúc od 0.
- Výstup „ab“ je platný, pretože jedno „a“ je sprevádzané jedným „b“.
- Výstup „abb“ je platný, pretože jediné „a“ sprevádzané 2 „b“.
- Výstup „a“ je platný, pretože jediné „a“ sprevádzané 0 „b“.
- Výstup „abbb“ je platný, pretože jedno „a“ sprevádza 3 „b“.
3. re.split()
Rozdeľte reťazec podľa výskytov znaku alebo vzoru a po nájdení tohto vzoru sa zostávajúce znaky z reťazca vrátia ako súčasť výsledného zoznamu.
Syntax:
re.split(pattern, string, maxsplit=0, flags=0)>
Prvý parameter, vzor označuje regulárny výraz, reťazec je daný reťazec, v ktorom sa bude vzor hľadať a v ktorom dôjde k rozdeleniu, maxsplit, ak nie je zadaný, sa považuje za nulu '0' a ak je zadaná akákoľvek nenulová hodnota, potom nanajvýš toľko rozchodov. Ak maxsplit = 1, potom sa reťazec rozdelí iba raz, výsledkom čoho bude zoznam dĺžky 2. Príznaky sú veľmi užitočné a môžu pomôcť skrátiť kód, nie sú nevyhnutnými parametrami, napr.: flags = re.IGNORECASE, v tomto rozdelení , malé alebo veľké písmená budú ignorované.
Príklad 1:
Rozdelí reťazec pomocou neslovných znakov a medzier ako oddeľovačov a vráti slová: ['Words', 'words', 'Words']> . Považuje apostrofy za neslovné znaky: ['Word', 's', 'words', 'Words']> . Rozdelenie pomocou neslovných znakov a číslic: ['On', '12th', 'Jan', '2016', 'at', '11', '02', 'AM']> . Rozdelenie pomocou číslic ako oddeľovača: ['On ', 'th Jan ', ', at ', ':', ' AM']> .
Python
from> re>import> split> > print>(split(>'W+'>,>'Words, words , Words'>))> print>(split(>'W+'>,>'Word's words Words'>))> print>(split(>'W+'>,>'On 12th Jan 2016, at 11:02 AM'>))> print>(split(>'d+'>,>'On 12th Jan 2016, at 11:02 AM'>))> |
>
>Výkon
['Words', 'words', 'Words'] ['Word', 's', 'words', 'Words'] ['On', '12th', 'Jan', '2016', 'at', '11', '02', 'AM'] ['On ', 'th Jan ', ', at ', ':', ' AM']>
Príklad 2:
Prvý príkaz rozdeľuje reťazec pri prvom výskyte jednej alebo viacerých číslic: ['On ', 'th Jan 2016, at 11:02 AM']> . sekunda rozdeľuje reťazec pomocou malých písmen a až f ako oddeľovačov, pričom sa nerozlišujú malé a veľké písmená: ['', 'y, ', 'oy oh ', 'oy, ', 'ome here'> ]>. Tretí rozdelí reťazec pomocou malých písmen a až f ako oddeľovačov, pričom sa rozlišujú malé a veľké písmená: ['', 'ey, Boy oh ', 'oy, ', 'ome here']> .
Python
import> re> print>(re.split(>'d+'>,>'On 12th Jan 2016, at 11:02 AM'>,>1>))> print>(re.split(>'[a-f]+'>,>'Aey, Boy oh boy, come here'>, flags>=>re.IGNORECASE))> print>(re.split(>'[a-f]+'>,>'Aey, Boy oh boy, come here'>))> |
>
>Výkon
['On ', 'th Jan 2016, at 11:02 AM'] ['', 'y, ', 'oy oh ', 'oy, ', 'om', ' h', 'r', ''] ['A', 'y, Boy oh ', 'oy, ', 'om', ' h', 'r', '']>
4. re.sub()
„sub“ vo funkcii znamená SubString, v danom reťazci sa hľadá určitý vzor regulárneho výrazu (3. parameter) a po nájdení vzoru podreťazca je nahradený repl (2. parameter), počet skontroluje a zachová, koľkokrát toto nastane.
Syntax:
re.sub(pattern, repl, string, count=0, flags=0)>
Príklad 1:
- Prvý príkaz nahrádza všetky výskyty „ub“ znakom „~*“ (nerozlišujú sa malé a veľké písmená):
'S~*ject has ~*er booked already'>. - Druhý príkaz nahrádza všetky výskyty „ub“ za „~*“ (rozlišujú sa malé a veľké písmená):
'S~*ject has Uber booked already'>. - Tretí príkaz nahrádza prvý výskyt „ub“ znakom „~*“ (nerozlišujú sa malé a veľké písmená):
'S~*ject has Uber booked already'>. - Štvrtý nahrádza „AND“ znakom „&“ (nerozlišujú sa malé a veľké písmená):
'Baked Beans & Spam'>.
Python
import> re> print>(re.sub(>'ub'>,>'~*'>,>'Subject has Uber booked already'>,> >flags>=>re.IGNORECASE))> print>(re.sub(>'ub'>,>'~*'>,>'Subject has Uber booked already'>))> print>(re.sub(>'ub'>,>'~*'>,>'Subject has Uber booked already'>,> >count>=>1>, flags>=>re.IGNORECASE))> print>(re.sub(r>'sANDs'>,>' & '>,>'Baked Beans And Spam'>,> >flags>=>re.IGNORECASE))> |
>
>Výkon
S~*ject has ~*er booked already S~*ject has Uber booked already S~*ject has Uber booked already Baked Beans & Spam>
5. re.subn()
subn() je podobný sub() vo všetkých smeroch, okrem spôsobu poskytovania výstupu. Vracia n-ticu s počtom celkových náhrad a nového reťazca, nie iba reťazca.
Syntax:
re.subn(pattern, repl, string, count=0, flags=0)>
Príklad:
re.subn()> nahradí všetky výskyty vzoru v reťazci a vráti n-ticu s upraveným reťazcom a počtom vykonaných náhrad. Je to užitočné pre substitúcie, v ktorých sa rozlišujú malé a veľké písmená.
Python
import> re> > print>(re.subn(>'ub'>,>'~*'>,>'Subject has Uber booked already'>))> > t>=> re.subn(>'ub'>,>'~*'>,>'Subject has Uber booked already'>,> >flags>=>re.IGNORECASE)> print>(t)> print>(>len>(t))> print>(t[>0>])> |
>
>Výkon
('S~*ject has Uber booked already', 1) ('S~*ject has ~*er booked already', 2) 2 S~*ject has ~*er booked already> 6. re.escape()
Vráti reťazec so všetkými nealfanumerickými lomkami, čo je užitočné, ak chcete nájsť zhodu s ľubovoľným doslovným reťazcom, ktorý môže obsahovať metaznaky regulárneho výrazu.
Syntax:
re.escape(string)>
Príklad:
re.escape()> sa používa na únik špeciálnych znakov v reťazci, vďaka čomu je bezpečné ho použiť ako vzor v regulárnych výrazoch. Zabezpečuje, že všetky znaky so špeciálnym významom v regulárnych výrazoch sa považujú za doslovné znaky.
Python
import> re> print>(re.escape(>'This is Awesome even 1 AM'>))> print>(re.escape(>'I Asked what is this [a-9], he said ^WoW'>))> |
>
>
ak rudyardom kiplingom súhrnVýkon
This is Awesome even 1 AM I Asked what is this [a-9], he said ^WoW>
7. re.search()
Táto metóda buď vráti None (ak sa vzor nezhoduje), alebo re.MatchObject obsahuje informácie o zodpovedajúcej časti reťazca. Táto metóda sa zastaví po prvej zhode, takže je najvhodnejšia na testovanie regulárneho výrazu viac ako extrahovanie údajov.
Príklad: Hľadá sa výskyt vzoru
Tento kód používa regulárny výraz na vyhľadanie vzoru v danom reťazci. Ak sa nájde zhoda, extrahuje a vytlačí zhodné časti reťazca.
V tomto konkrétnom príklade hľadá vzor, ktorý sa skladá z mesiaca (písmená), za ktorým nasleduje deň (číslice) vo vstupnom reťazci Narodil som sa 24. júna. Ak sa nájde zhoda, vytlačí celú zhodu, mesiac , a deň.
Python3
import> re> regex>=> r>'([a-zA-Z]+) (d+)'> > match>=> re.search(regex,>'I was born on June 24'>)> if> match !>=> None>:> >print> (>'Match at index %s, %s'> %> (match.start(), match.end()))> >print> (>'Full match: %s'> %> (match.group(>0>)))> >print> (>'Month: %s'> %> (match.group(>1>)))> >print> (>'Day: %s'> %> (match.group(>2>)))> > else>:> >print> (>'The regex pattern does not match.'>)> |
>
>Výkon
Match at index 14, 21 Full match: June 24 Month: June Day: 24>
SÚPRAVY
A Set je množina znakov uzavretých v zátvorkách „[]“. Sady sa používajú na priradenie jedného znaku v množine znakov špecifikovaných v zátvorkách. Nižšie je uvedený zoznam sád:
| Set | Popis |
|---|---|
| {n,} | Kvantifikuje predchádzajúci znak alebo skupinu a zhoduje sa s najmenej n výskytmi. |
| * | Kvantifikuje predchádzajúci znak alebo skupinu a zhoduje sa s nulovým alebo viacerými výskytmi. |
| [0123] | Zhoduje sa so zadanými číslicami (0, 1, 2 alebo 3) |
| [^arn] | zhoduje sa s ľubovoľným znakom OKREM a, r a n |
| d | Zhoduje sa s ľubovoľnou číslicou (0-9). |
| [0-5][0-9] | zhoduje sa s ľubovoľnými dvojcifernými číslami od 00 do 59 |
| In | Zhoduje sa s akýmkoľvek alfanumerickým znakom (a-z, A-Z, 0-9 alebo _). |
| [a-n] | Zhoduje sa s ľubovoľnou malou abecedou medzi a a n. |
| D | Zodpovedá akémukoľvek nečíslicovému znaku. |
| [arn] | zhoduje sa tam, kde je prítomný jeden zo špecifikovaných znakov (a, r alebo n). |
| [a-zA-Z] | zodpovedá ľubovoľnému znaku medzi a a z, malým písmenám ALEBO veľkým písmenám |
| [0-9] | zodpovedá ľubovoľnej číslici medzi 0 a 9 |
Zhoda objektu
Objekt Match obsahuje všetky informácie o hľadaní a výsledku a ak sa nenájde žiadna zhoda, vráti sa None. Pozrime sa na niektoré z bežne používaných metód a atribútov objektu zhody.
1. Získanie reťazca a regulárneho výrazu
match.re atribút vráti regulárny výraz odovzdaný a zápas.string atribút vráti odovzdaný reťazec.
Príklad: Získanie reťazca a regulárneho výrazu zhodného objektu
Kód hľadá písmeno G na hranici slova v reťazci Vitajte v GeeksForGeeks a vytlačí vzor regulárneho výrazu ( res.re> ) a pôvodný reťazec ( res.string> ) .
Python3
import> re> s>=> 'Welcome to GeeksForGeeks'> res>=> re.search(r>'G'>, s)> > print>(res.re)> print>(res.string)> |
>
>Výkon
re.compile('G') Welcome to GeeksForGeeks> 2. Získanie indexu zhodného objektu
- metóda start() vracia počiatočný index zhodného podreťazca
- metóda end() vracia koncový index zhodného podreťazca
- Metóda span() vracia n-ticu obsahujúcu počiatočný a koncový index zhodného podreťazca
Príklad: Získanie indexu zhodného objektu
Kód vyhľadá podreťazec Gee na hranici slova v reťazci Welcome to GeeksForGeeks a vytlačí počiatočný index zhody (res.start()>), index konca zápasu (res.end()>) a rozpätie zápasu (res.span()>).
Python3
import> re> > s>=> 'Welcome to GeeksForGeeks'> > res>=> re.search(r>'Gee'>, s)> > print>(res.start())> print>(res.end())> print>(res.span())> |
>
>Výkon
11 14 (11, 14)>
3. Získanie zhody podreťazca
metóda group() vráti časť reťazca, pre ktorú sa vzory zhodujú. Pre lepšie pochopenie si pozrite nižšie uvedený príklad.
Príklad: Získava sa zhodný podreťazec
Kód hľadá sekvenciu dvoch nečíslicových znakov, za ktorými nasleduje medzera a písmeno „t“ v reťazci Welcome to GeeksForGeeks a vytlačí zodpovedajúci text pomocou res.group()> .
Python3
import> re> s>=> 'Welcome to GeeksForGeeks'> res>=> re.search(r>'D{2} t'>, s)> print>(res.group())> |
>
>Výkon
me t>
Vo vyššie uvedenom príklade náš vzor špecifikuje reťazec, ktorý obsahuje aspoň 2 znaky, za ktorými nasleduje medzera, a za touto medzerou nasleduje t.
Súvisiaci článok:
Referencia:
https://docs.python.org/2/library/re.html
Diskutovali sme o RegEx v Pythone, prešli sme metaznaky, funkcie a špeciálne sekvencie v RegEx Pythone.
Regulárny výraz je v Pythone veľmi dôležitý pojem, pokúsili sme sa ho vysvetliť jednoduchým spôsobom. Dúfam, že vám to pomôže pri vašej ceste Python!