Python Regex: re.search() VS re.findall()
Predpoklad: Regulárny výraz s príkladmi | Python
Regulárny výraz (niekedy nazývaný aj racionálny výraz) je sekvencia znakov, ktoré definujú vzor vyhľadávania, hlavne na použitie pri porovnávaní vzorov s reťazcami alebo pri porovnávaní reťazcov, t. j. operácie podobné hľadaniu a nahradeniu. Regulárne výrazy predstavujú zovšeobecnený spôsob spájania vzorov so sekvenciami znakov.
modul regulárne výrazy (RE) určuje množinu reťazcov (vzor), ktoré sa s ním zhodujú. Aby sme pochopili analógiu RE, MetaCharacters> sú užitočné, dôležité a budú použité vo funkciách modulu re> .
Existuje celkom 14 metaznakov a budeme o nich diskutovať, keď budú nasledovať do funkcií:
Used to drop the special meaning of character following it (discussed below) [] Represent a character class ^ Matches the beginning $ Matches the end . Matches any character except newline ? Matches zero or one occurrence. | Means OR (Matches with any of the characters separated by it. * Any number of occurrences (including 0 occurrences) + One or more occurrences {} Indicate number of occurrences of a preceding RE to match. () Enclose a group of REs re.search()
re.search()> metóda buď vráti None (ak sa vzor nezhoduje), alebo a re.MatchObject> ktorý obsahuje informácie o zhodnej č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 na extrahovanie údajov.
Príklad:
Python3
# A Python program to demonstrate working of re.match().> import> re> > # Lets use a regular expression to match a date string> # in the form of Month name followed by day number> regex> => r> '([a-zA-Z]+) (d+)'> > match> => re.search(regex,> 'I was born on June 24'> )> > if> match !> => None> :> > > # We reach here when the expression '([a-zA-Z]+) (d+)'> > # matches the date string.> > > # This will print [14, 21), since it matches at index 14> > # and ends at 21.> > print> (> 'Match at index % s, % s'> %> (match.start(), match.end()))> > > # We us group() method to get all the matches and> > # captured groups. The groups contain the matched values.> > # In particular:> > # match.group(0) always returns the fully matched string> > # match.group(1) match.group(2), ... return the capture> > # groups in order from left to right in the input string> > # match.group() is equivalent to match.group(0)> > > # So this will print 'June 24'> > print> (> 'Full match: % s'> %> (match.group(> 0> )))> > > # So this will print 'June'> > print> (> 'Month: % s'> %> (match.group(> 1> )))> > > # So this will print '24'> > 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
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í.
Príklad:
Python3
# A Python program to demonstrate working of> # findall()> import> re> > # A sample text string where regular expression> # is searched.> string> => '''Hello my Number is 123456789 and> > my friend's number is 987654321'''> > # A sample regular expression to find digits.> regex> => 'd+'> > match> => re.findall(regex, string)> print> (match)> |
Výkon:
['123456789', '987654321']