logo

Regulárny výraz (RegEx) v Pythone s príkladmi

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úhrn
Vý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!