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: