Python RegEx: re.match(), re.search(), re.findall() med Exempel

Vad är reguljärt uttryck i Python?

A Reguljärt uttryck (RE) i ett programmeringsspråk är en speciell textsträng som används för att beskriva ett sökmönster. Det är extremt användbart för att extrahera information från text som kod, filer, logg, kalkylblad eller till och med dokument.

När du använder Python reguljära uttryck det första är att känna igen är att allt i huvudsak är ett tecken, och vi skriver mönster för att matcha en specifik sekvens av tecken, även kallad sträng. Ascii eller latinska bokstäver är de som finns på dina tangentbord och Unicode används för att matcha den främmande texten. Den innehåller siffror och skiljetecken och alla specialtecken som $#@!%, etc.

Till exempel a Python reguljärt uttryck kan säga till ett program att söka efter specifik text från strängen och sedan skriva ut resultatet därefter. Uttryck kan inkludera

  • Textmatchning
  • Upprepning
  • förgrening
  • Mönster-komposition etc.

Reguljärt uttryck eller RegEx in Python betecknas som RE (RE, regex eller regexmönster) importeras igenom re modul. Python stöder reguljära uttryck genom bibliotek. RegEx in Python stödjer olika saker som Modifierare, identifierare och blanktecken.

Identifierare modifierare Vita tecken Escape krävs
\d= valfritt tal (en siffra) \d representerar en siffra.Ex: \d{1,5} kommer att deklarera en siffra mellan 1,5 som 424,444,545 osv. \n = ny rad . + * ? [] $ ^ () {} | \
\D= allt annat än ett tal (en icke-siffra) + = matchar 1 eller fler \s= mellanslag
\s = mellanslag
(tab, blanksteg, nyrad etc.)
? = matchar 0 eller 1 \t =tab
\S= allt annat än ett mellanslag * = 0 eller mer \e = flykt
\w = bokstäver ( Matcha alfanumeriskt tecken, inklusive "_") $ matcha slutet av en sträng \r = vagnretur
\W =allt annat än bokstäver ( Matchar ett icke-alfanumeriskt tecken exklusive "_") ^ matcha början av en sträng \f= formulärflöde
. = allt annat än bokstäver (punkter) | matchar antingen eller x/y ------
\b = vilket tecken som helst förutom ny rad [] = intervall eller "varians" ------
\. {x} = denna mängd av föregående kod ------

Syntax för reguljärt uttryck (RE).

import re
  • "re" modul medföljer Python används främst för strängsökning och manipulation
  • Används också ofta för webbsida "skrapning” (extrahera stora mängder data från webbplatser)

Vi börjar uttryckshandledningen med denna enkla övning genom att använda uttrycken (w+) och (^).

Exempel på w+ och ^ uttryck

  • "^": Detta uttryck matchar början av en sträng
  • "w+“: Detta uttryck matchar det alfanumeriska tecknet i strängen

Här kommer vi att se en Python RegEx Exempel på hur vi kan använda uttrycket w+ och ^ i vår kod. Vi täcker funktionen re.findall() i Python, senare i denna handledning, men ett tag fokuserar vi helt enkelt på uttrycket \w+ och \^.

Till exempel, för vår sträng "guru99, utbildning är kul" om vi kör koden med w+ och^, kommer det att ge utdata "guru99".

Exempel på w+ och ^ uttryck

import re
xx = "guru99,education is fun"
r1 = re.findall(r"^\w+",xx)
print(r1)

Kom ihåg att om du tar bort +tecken från w+ kommer utdata att ändras, och det kommer bara att ge det första tecknet i den första bokstaven, dvs [g]

Exempel på \s uttryck i re.split funktion

  • "s": Detta uttryck används för att skapa ett mellanslag i strängen

För att förstå hur detta RegEx in Python fungerar, börjar vi med en enkel Python RegEx Exempel på en delad funktion. I exemplet har vi delat upp varje ord med hjälp av funktionen "re.split" och samtidigt har vi använt uttryck \s som gör det möjligt att analysera varje ord i strängen separat.

\s uttryck i re.split funktion

När du kör den här koden kommer den att ge dig utdata ['vi', 'är', 'delning', 'the', 'ord'].

Låt nu se vad som händer om du tar bort "\" från s. Det finns inget 's'-alfabet i utgången, det beror på att vi har tagit bort '\' från strängen, och det utvärderar "s" som ett vanligt tecken och delar därmed orden varhelst det hittar "s" i strängen.

\s uttryck i re.split funktion

På samma sätt finns det serier av andra Python reguljära uttryck som du kan använda på olika sätt i Python som \d,\D,$,\.,\b osv.

Här är den fullständiga koden

import re
xx = "guru99,education is fun"
r1 = re.findall(r"^\w+", xx)
print((re.split(r'\s','we are splitting the words')))
print((re.split(r's','split the words')))

Därefter kommer vi att se vilka typer av metoder som används med reguljärt uttryck i Python.

Använda reguljära uttrycksmetoder

Paketet "re" tillhandahåller flera metoder för att faktiskt utföra frågor på en indatasträng. Vi kommer att se metoderna för re in Python:

  • returmatch()
  • forskning()
  • re.findall()

Anmärkningar: Baserat på de reguljära uttrycken, Python erbjuder två olika primitiva operationer. Matchningsmetoden söker endast efter en matchning i början av strängen medan sökning söker efter en matchning var som helst i strängen.

returmatch()

returmatch() funktion av re in Python kommer att söka efter det reguljära uttrycksmönstret och returnera den första förekomsten. De Python RegEx Match-metoden söker endast efter en matchning i början av strängen. Så om en matchning hittas på den första raden returnerar den matchningsobjektet. Men om en matchning hittas i någon annan linje, Python RegEx Match-funktionen returnerar null.

Tänk till exempel på följande kod för Python re.match() funktion. Uttrycken "w+" och "\W" kommer att matcha orden som börjar med bokstaven 'g' och därefter identifieras inte allt som inte startas med 'g'. För att kontrollera matchning för varje element i listan eller strängen kör vi forloopen i denna Python re.match() Exempel.

returmatch()

re.search(): Hitta mönster i text

forskning() funktionen söker efter det reguljära uttrycksmönstret och returnerar den första förekomsten. Till skillnad från Python re.match(), kommer den att kontrollera alla rader i inmatningssträngen. De Python re.search()-funktionen returnerar ett matchningsobjekt när mönstret hittas och "null" om mönstret inte hittas

Hur använder man sök()?

För att använda sökfunktionen () måste du importera Python re modul först och exekvera sedan koden. De Python re.search()-funktionen tar "mönster" och "text" för att skanna från vår huvudsträng

använd sök()

Här letar vi till exempel efter två bokstavliga strängar "Software testing" "guru99", i en textsträng "Software" Testning är kul”. För "mjukvarutestning" hittade vi matchningen, så den returnerar resultatet av Python re.search() Exempel som "hittade en matchning", medan ordet "guru99" inte kunde hittas i strängen och därför returnerar det utdata som "Ingen matchning".

re.findall()

hitta alla() modulen används för att söka efter "alla" förekomster som matchar ett givet mönster. Däremot returnerar modulen search() endast den första förekomsten som matchar det angivna mönstret. findall() itererar över alla rader i filen och returnerar alla icke-överlappande mönstermatchningar i ett enda steg.

Hur man använder re.findall() i Python?

Här har vi en lista med e-postadresser, och vi vill att alla e-postadresser ska hämtas från listan, vi använder metoden re.findall() i Python. Den kommer att hitta alla e-postadresser från listan.

 Använd re.findall() i Python

Här är den fullständiga koden för Exempel på re.findall()

import re

list = ["guru99 get", "guru99 give", "guru Selenium"]
for element in list:
    z = re.match("(g\w+)\W(g\w+)", element)
if z:
    print((z.groups()))
    
patterns = ['software testing', 'guru99']
text = 'software testing is fun?'
for pattern in patterns:
    print('Looking for "%s" in "%s" ->' % (pattern, text), end=' ')
    if re.search(pattern, text):
        print('found a match!')
else:
    print('no match')
abc = '[email protected], [email protected], [email protected]'
emails = re.findall(r'[\w\.-]+@[\w\.-]+', abc)
for email in emails:
    print(email)

Python Flaggor

Många Python Regex-metoder och Regex-funktioner tar ett valfritt argument som kallas Flags. Dessa flaggor kan ändra innebörden av det givna Python Regex mönster. För att förstå dessa kommer vi att se ett eller två exempel på dessa flaggor.

Olika flaggor som används i Python innefattar

Syntax för Regex-flaggor Vad gör den här flaggan
[re.M] Gör början/slutet överväga varje rad
[re.I] Den ignorerar fallet
[re.S] Göra [ . ]
[re.U] Gör att { \w,\W,\b,\B} följer Unicode-regler
[re.L] Få {\w,\W,\b,\B} att följa språket
[re.X] Tillåt kommentarer i Regex

Exempel på re.M eller Multiline Flags

I multiline matchar mönstertecknet [^] det första tecknet i strängen och början av varje rad (följer omedelbart efter varje nyrad). Medan uttrycket litet "w" används för att markera utrymmet med tecken. När du kör koden skriver den första variabeln "k1" bara ut tecknet 'g' för word guru99, medan när du lägger till flerradsflagga hämtar den ut de första tecknen i alla element i strängen.

Exempel på re.M eller Multiline Flags

Här är koden

import re
xx = """guru99 
careerguru99	
selenium"""
k1 = re.findall(r"^\w", xx)
k2 = re.findall(r"^\w", xx, re.MULTILINE)
print(k1)
print(k2)
  • Vi deklarerade variabeln xx för sträng ”guru99…. careerguru99….selenium”
  • Kör koden utan att använda flaggor med flera rader, det ger bara utdata från raderna
  • Kör koden med flaggan "multiline", när du skriver ut 'k2' ger den utdata som 'g', 'c' och 's'
  • Så skillnaden kan vi se efter och innan vi lägger till flera rader i exemplet ovan.

På samma sätt kan du också använda andra Python flaggor som re.U (Unicode), re.L (Follow locale), re.X (Tillåt kommentar), etc.

Python 2 Exempel

Ovanstående koder är Python 3 exempel, om du vill springa in Python 2 överväg följande kod.

# Example of w+ and ^ Expression
import re
xx = "guru99,education is fun"
r1 = re.findall(r"^\w+",xx)
print r1

# Example of \s expression in re.split function
import re
xx = "guru99,education is fun"
r1 = re.findall(r"^\w+", xx)
print (re.split(r'\s','we are splitting the words'))
print (re.split(r's','split the words'))

# Using re.findall for text
import re

list = ["guru99 get", "guru99 give", "guru Selenium"]
for element in list:
    z = re.match("(g\w+)\W(g\w+)", element)
if z:
    print(z.groups())
    
patterns = ['software testing', 'guru99']
text = 'software testing is fun?'
for pattern in patterns:
    print 'Looking for "%s" in "%s" ->' % (pattern, text),
    if re.search(pattern, text):
        print 'found a match!'
else:
    print 'no match'
abc = '[email protected], [email protected], [email protected]'
emails = re.findall(r'[\w\.-]+@[\w\.-]+', abc)
for email in emails:
    print email

# Example of re.M or Multiline Flags
import re
xx = """guru99 
careerguru99	
selenium"""
k1 = re.findall(r"^\w", xx)
k2 = re.findall(r"^\w", xx, re.MULTILINE)
print k1
print k2

Testa din Python Kunskap

1. Vilken metod används för att hitta alla förekomster av ett mönster i en sträng?

  • forskning()
  • returmatch()
  • re.findall()
  • re.split()
re.findall() används för att hitta alla förekomster av ett mönster i en sträng.

2. Vad representerar teckenklassen \d i reguljära uttryck?

  • Valfri siffra (0-9)
  • Alla icke-siffriga tecken
  • Vilket blanksteg som helst
  • Vilken bokstav eller siffra som helst
\d representerar valfri siffra (0-9).

3. Vilken funktion skulle du använda för att dela en sträng baserat på mellanslag?

  • re.split(r'\s', sträng)
  • re.findall(r'\w+', sträng)
  • re.match(r'\s+', sträng)
  • re.split(r'\w+', sträng)
re.split(r'\s', sträng) delar en sträng baserat på mellanslag med hjälp av uttrycket \s.

4. Vad är den största skillnaden mellan re.match() och re.search()?

  • re.match() letar efter ett mönster i början av en sträng, medan re.search() letar efter ett mönster var som helst i strängen.
  • re.match() returnerar alla matchningar, medan re.search() returnerar den första matchningen.
  • re.search() är snabbare än re.match().
  • Båda funktionerna fungerar på samma sätt.
re.match() letar efter ett mönster i början av en sträng, medan re.search() letar efter ett mönster var som helst i strängen.

Sammanfattning

Ett reguljärt uttryck i en programmeringsspråk är en speciell textsträng som används för att beskriva ett sökmönster. Den innehåller siffror och skiljetecken och alla specialtecken som $#@!%, etc. Uttryck kan innehålla bokstavliga tecken

  • Textmatchning
  • Upprepning
  • förgrening
  • Mönster-komposition etc.

In Python, ett reguljärt uttryck betecknas som RE (REs, regex eller regexmönster) är inbäddade genom Python re modul.

  • "re" modul medföljer Python används främst för strängsökning och manipulation
  • Används också ofta för webbsida "skrapning" (extrahera stora mängder data från webbplatser)
  • Reguljära uttrycksmetoder inkluderar re.match(),re.search()& re.findall()
  • Övrigt Python RegEx-ersättningsmetoder är sub() och subn() som används för att ersätta matchande strängar i re
  • Python Flaggor Många Python Regex-metoder och Regex-funktioner tar ett valfritt argument som kallas Flags
  • Denna flagga kan ändra innebörden av det givna Regex-mönstret
  • Övrigt Python flaggor som används i Regex-metoder är re.M, re.I, re.S, etc.

Sammanfatta detta inlägg med: