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

Hva er regulรฆrt uttrykk i Python?

A Regulรฆrt uttrykk (RE) i et programmeringssprรฅk er en spesiell tekststreng som brukes for รฅ beskrive et sรธkemรธnster. Det er ekstremt nyttig for รฅ trekke ut informasjon fra tekst som kode, filer, logg, regneark eller til og med dokumenter.

Mens du bruker Python regulรฆre uttrykk det fรธrste er รฅ gjenkjenne er at alt i hovedsak er et tegn, og vi skriver mรธnstre for รฅ matche en bestemt sekvens av tegn, ogsรฅ referert til som streng. Ascii eller latinske bokstaver er de som er pรฅ tastaturene dine, og Unicode brukes for รฅ matche den fremmede teksten. Den inkluderer sifre og tegnsetting og alle spesialtegn som $#@!% osv.

For eksempel a Python regulรฆre uttrykk kan fortelle et program รฅ sรธke etter spesifikk tekst fra strengen og deretter skrive ut resultatet deretter. Uttrykk kan inkludere

  • Tekstmatching
  • Gjentakelse
  • forgrening
  • Mรธnster-komposisjon etc.

Regulรฆrt uttrykk eller RegEx in Python er angitt som RE (RE-er, regexes eller regex-mรธnster) importeres gjennom re modul. Python stรธtter regelmessig uttrykk gjennom biblioteker. RegEx i Python stรธtter ulike ting som Modifikatorer, identifikatorer og mellomromstegn.

Identifikatorer Modifikatorer Tegn med hvite mellomrom Rรธmning nรธdvendig
\d= et hvilket som helst tall (et siffer) \d representerer et siffer. Eks: \d{1,5} vil deklarere siffer mellom 1,5 som 424,444,545 osv. \n = ny linje . + * ? [] $ ^ () {} | \
\D= alt annet enn et tall (et ikke-siffer) + = samsvarer med 1 eller flere \s= mellomrom
\s = mellomrom
(tab, mellomrom, ny linje osv.)
? = samsvarer med 0 eller 1 \t =tab
\S= alt annet enn et mellomrom * = 0 eller mer \e = rรธmme
\w = bokstaver (Samsvar med alfanumerisk tegn, inkludert "_") $ samsvarer med slutten av en streng \r = vognretur
\W =alt annet enn bokstaver (Svarer til et ikke-alfanumerisk tegn unntatt "_") ^ samsvarer med starten pรฅ en streng \f= skjemafeed
. = alt annet enn bokstaver (punktum) | samsvarer med enten eller x/y ------
\b = et hvilket som helst tegn bortsett fra ny linje [] = omrรฅde eller "varians" ------
\. {x} = denne mengden av forrige kode ------

Syntaks for regulรฆrt uttrykk (RE).

import re
  • "re"-modul fรธlger med Python primรฆrt brukt til strengsรธking og manipulering
  • Brukes ogsรฅ ofte for nettsider "skraping" (trekk ut store mengder data fra nettsteder)

Vi vil begynne uttrykksopplรฆringen med denne enkle รธvelsen ved รฅ bruke uttrykkene (w+) og (^).

Eksempel pรฅ w+ og ^ uttrykk

  • ยซ^ยป: Dette uttrykket samsvarer med starten pรฅ en streng
  • "w+โ€œ: Dette uttrykket samsvarer med det alfanumeriske tegnet i strengen

Her vil vi se en Python RegEx Eksempel pรฅ hvordan vi kan bruke w+ og ^ uttrykk i koden vรฅr. Vi dekker funksjonen re.findall() i Python, senere i denne opplรฆringen, men for en stund fokuserer vi ganske enkelt pรฅ \w+ og \^ uttrykk.

For eksempel, for strengen vรฅr โ€œguru99, education is funโ€ hvis vi kjรธrer koden med w+ og^, vil den gi utdataene โ€œguru99โ€.

Eksempel pรฅ w+ og ^ uttrykk

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

Husk at hvis du fjerner +tegnet fra w+, vil utdata endres, og det vil bare gi det fรธrste tegnet i den fรธrste bokstaven, dvs. [g]

Eksempel pรฅ \s uttrykk i re.split funksjon

  • "s": Dette uttrykket brukes for รฅ lage et mellomrom i strengen

For รฅ forstรฅ hvordan dette RegEx inn Python fungerer, begynner vi med en enkel Python RegEx Eksempel pรฅ en delt funksjon. I eksemplet har vi delt hvert ord ved รฅ bruke ยซre.splitยป-funksjonen og samtidig har vi brukt uttrykk \s som gjรธr det mulig รฅ analysere hvert ord i strengen separat.

\s uttrykk i re.split funksjon

Nรฅr du kjรธrer denne koden vil den gi deg utdataene ['vi', 'er', 'splitting', 'the', 'ord'].

La nรฅ se hva som skjer hvis du fjerner "\" fra s. Det er ikke noe 's'-alfabet i utdataene, dette er fordi vi har fjernet '\' fra strengen, og den evaluerer "s" som et vanlig tegn og deler dermed ordene der den finner "s" i strengen.

\s uttrykk i re.split funksjon

Pรฅ samme mรฅte er det serier av andre Python regulรฆre uttrykk som du kan bruke pรฅ ulike mรฅter i Python som \d,\D,$,\.,\b osv.

Her er den komplette 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')))

Deretter skal vi se hvilke typer metoder som brukes med regulรฆrt uttrykk i Python.

Bruke regulรฆre uttrykksmetoder

"re"-pakken gir flere metoder for รฅ faktisk utfรธre spรธrringer pรฅ en inndatastreng. Vi vil se metodene for re in Python:

  • re.match()
  • forskning()
  • re.findall()

Merknader: Basert pรฅ de regulรฆre uttrykkene, Python tilbyr to forskjellige primitive operasjoner. Samsvarsmetoden sjekker etter samsvar bare i begynnelsen av strengen, mens sรธk sjekker for samsvar hvor som helst i strengen.

re.match()

re.match() funksjon av re in Python vil sรธke i det regulรฆre uttrykksmรธnsteret og returnere den fรธrste forekomsten. De Python RegEx Match-metoden ser etter en match bare i begynnelsen av strengen. Sรฅ hvis en match blir funnet pรฅ den fรธrste linjen, returnerer den matchobjektet. Men hvis en match er funnet i en annen linje, vil Python RegEx Match-funksjonen returnerer null.

Tenk for eksempel pรฅ fรธlgende kode for Python re.match() funksjon. Uttrykket "w+" og "\W" vil samsvare med ordene som begynner med bokstaven 'g', og deretter blir ikke alt som ikke starter med 'g' identifisert. For รฅ sjekke samsvar for hvert element i listen eller strengen, kjรธrer vi forloopen i denne Python re.match() Eksempel.

re.match()

re.search(): Finne mรธnster i tekst

forskning() funksjonen vil sรธke i det regulรฆre uttrykksmรธnsteret og returnere den fรธrste forekomsten. I motsetning til Python re.match(), vil den sjekke alle linjene i inndatastrengen. De Python re.search()-funksjonen returnerer et matchobjekt nรฅr mรธnsteret er funnet og "null" hvis mรธnsteret ikke blir funnet

Hvordan bruker jeg sรธk()?

For รฅ bruke sรธke()-funksjonen, mรฅ du importere Python re modul fรธrst og utfรธr deretter koden. De Python re.search()-funksjonen tar "mรธnsteret" og "teksten" for รฅ skanne fra hovedstrengen vรฅr

bruk sรธk()

For eksempel her ser vi etter to bokstavelige strenger "Software testing" "guru99", i en tekststreng "Software" Testing er gรธyยป. For "programvaretesting" fant vi samsvaret, og returnerer derfor utdataene til Python re.search() Eksempel som "funnet en match", mens for ordet "guru99" kunne vi ikke finne i strengen, og derfor returnerer det utdata som "No match".

re.findall()

finneall() modulen brukes til รฅ sรธke etter "alle" forekomster som samsvarer med et gitt mรธnster. I motsetning til dette vil search()-modulen bare returnere den fรธrste forekomsten som samsvarer med det angitte mรธnsteret. findall() vil iterere over alle linjene i filen og vil returnere alle ikke-overlappende mรธnstertreff i et enkelt trinn.

Slik bruker du re.findall() i Python?

Her har vi en liste med e-postadresser, og vi รธnsker at alle e-postadressene skal hentes ut fra listen, vi bruker metoden re.findall() i Python. Den vil finne alle e-postadressene fra listen.

 Bruk re.findall() i Python

Her er den komplette koden for eksempel 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 Flagg

Mange Python Regex-metoder og Regex-funksjoner tar et valgfritt argument kalt Flags. Disse flaggene kan endre betydningen av det gitte Python Regex-mรธnster. For รฅ forstรฅ disse vil vi se ett eller to eksempler pรฅ disse flaggene.

Ulike flagg brukt i Python inkluderer

Syntaks for Regex-flagg Hva gjรธr dette flagget
[re.M] La begynne/slutt vurdere hver linje
[re.I] Den ignorerer saken
[re.S] Gjรธr [ . ]
[re.U] Fรฅ { \w,\W,\b,\B} til รฅ fรธlge Unicode-reglene
[re.L] Fรฅ {\w,\W,\b,\B} til รฅ fรธlge lokalitet
[re.X] Tillat kommentarer i Regex

Eksempel pรฅ re.M eller Multiline Flags

I multiline samsvarer mรธnstertegnet [^] med det fรธrste tegnet i strengen og begynnelsen av hver linje (fรธlger umiddelbart etter hver ny linje). Mens uttrykket lite "w" brukes til รฅ markere mellomrommet med tegn. Nรฅr du kjรธrer koden, skriver den fรธrste variabelen "k1" bare ut tegnet 'g' for ord guru99, mens nรฅr du legger til flerlinjeflagg, henter den ut de fรธrste tegnene i alle elementene i strengen.

Eksempel pรฅ re.M eller Multiline Flags

Her er 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 erklรฆrte variabelen xx for streng โ€guru99โ€ฆ. careerguru99โ€ฆ.seleniumโ€
  • Kjรธr koden uten รฅ bruke flagg med flere linjer, det gir utdata bare 'g' fra linjene
  • Kjรธr koden med flagget "multiline", nรฅr du skriver ut 'k2' gir det utdata som 'g', 'c' og 's'
  • Sรฅ forskjellen kan vi se etter og fรธr vi legger til flere linjer i eksemplet ovenfor.

Pรฅ samme mรฅte kan du ogsรฅ bruke andre Python flagg som re.U (Unicode), re.L (Fรธlg lokalitet), re.X (Tillat kommentar) osv.

Python 2 Eksempel

Kodene ovenfor er Python 3 eksempler, hvis du vil lรธpe inn Python 2 vurder fรธlgende kode.

# 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

Test din Python Kunnskap

1. Hvilken metode brukes for รฅ finne alle forekomster av et mรธnster i en streng?

  • forskning()
  • re.match()
  • re.findall()
  • re.split()
re.findall() brukes til รฅ finne alle forekomster av et mรธnster i en streng.

2. Hva representerer tegnklassen \d i regulรฆre uttrykk?

  • Ethvert siffer (0-9)
  • Ethvert ikke-sifret tegn
  • Ethvert mellomromstegn
  • Enhver bokstav eller tall
\d representerer et hvilket som helst siffer (0-9).

3. Hvilken funksjon vil du bruke for รฅ dele en streng basert pรฅ mellomrom?

  • re.split(r'\s', streng)
  • re.findall(r'\w+', streng)
  • re.match(r'\s+', streng)
  • re.split(r'\w+', streng)
re.split(r'\s', streng) deler en streng basert pรฅ mellomrom ved รฅ bruke \s-uttrykket.

4. Hva er hovedforskjellen mellom re.match() og re.search()?

  • re.match() ser etter et mรธnster i starten av en streng, mens re.search() ser etter et mรธnster hvor som helst i strengen.
  • re.match() returnerer alle treff, mens re.search() returnerer det fรธrste treffet.
  • re.search() er raskere enn re.match().
  • Begge funksjonene oppfรธrer seg pรฅ samme mรฅte.
re.match() ser etter et mรธnster i starten av en streng, mens re.search() ser etter et mรธnster hvor som helst i strengen.

Sammendrag

Et regulรฆrt uttrykk i en programmeringssprรฅk er en spesiell tekststreng som brukes for รฅ beskrive et sรธkemรธnster. Den inkluderer sifre og tegnsetting og alle spesialtegn som $#@!% osv. Uttrykk kan inneholde bokstavelig

  • Tekstmatching
  • Gjentakelse
  • forgrening
  • Mรธnster-komposisjon etc.

In Python, er et regulรฆrt uttrykk betegnet som RE (RE-er, regekser eller regex-mรธnster) er innebygd gjennom Python re modul.

  • "re"-modul fรธlger med Python primรฆrt brukt til strengsรธking og manipulering
  • Brukes ogsรฅ ofte for "Scraping" av nettsider (trekk ut store mengder data fra nettsteder)
  • Regulรฆre uttrykksmetoder inkluderer re.match(),re.search()& re.findall()
  • Annet Python RegEx-erstatningsmetoder er sub() og subn() som brukes til รฅ erstatte samsvarende strenger i re
  • Python Flagg Mange Python Regex-metoder og Regex-funksjoner tar et valgfritt argument kalt Flags
  • Disse flaggene kan endre betydningen av det gitte Regex-mรธnsteret
  • Diverse Python flagg som brukes i Regex-metoder er re.M, re.I, re.S, etc.

Oppsummer dette innlegget med: