logo

Python Regex: re.search() VS re.findall()

Requisit previ: Expressió regular amb exemples | Python

Una expressió regular (de vegades anomenada expressió racional) és una seqüència de caràcters que defineixen un patró de cerca, principalment per utilitzar-se en la concordança de patrons amb cadenes, o la concordança de cadenes, és a dir, cercar i substituir operacions semblants. Les expressions regulars són una manera generalitzada de fer coincidir patrons amb seqüències de caràcters.



Mòdul Expressions regulars (RE) especifica un conjunt de cadenes (patró) que hi coincideix. Per entendre l'analogia RE,MetaCharacters>són útils, importants i s'utilitzaran en funcions del mòdulre>.

Hi ha un total de 14 metacaràcters i s'aniran analitzant a mesura que segueixen en funcions:

  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()>El mètode retorna Cap (si el patró no coincideix) o are.MatchObject>que conté informació sobre la part coincident de la cadena. Aquest mètode s'atura després de la primera coincidència, de manera que és més adequat per provar una expressió regular més que per extreure dades.



Exemple:

Python 3






# 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.'>)>

>

bucle while java
>

Sortida:

 Match at index 14, 21 Full match: June 24 Month: June Day: 24>

re.findall()

Retorna totes les coincidències del patró que no es superposen a la cadena, com a llista de cadenes. La cadena s'escaneja d'esquerra a dreta i les coincidències es retornen en l'ordre trobat.

Exemple:

Python 3




enter a cadena en java

# 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)>

>

>

Sortida:

 ['123456789', '987654321']>