Python RegEx: re.match(), re.search(), re.findall() näitega

Milles on regulaaravaldis Python?

A Regulaaravaldis (RE) programmeerimiskeeles on spetsiaalne tekstistring, mida kasutatakse otsingumustri kirjeldamiseks. See on äärmiselt kasulik tekstist, näiteks koodist, failidest, logidest, arvutustabelitest või isegi dokumentidest teabe hankimiseks.

Kasutades Python regulaaravaldis esimene asi on ära tunda, et kõik on sisuliselt märk ja me kirjutame mustreid, mis vastavad kindlale märgijadale, mida nimetatakse ka stringiks. Ascii või ladina tähed on need, mis on teie klaviatuuridel ja Unicode'i kasutatakse võõrteksti sobitamiseks. See sisaldab numbreid ja kirjavahemärke ning kõiki erimärke, nagu $#@!% jne.

Näiteks a Python regulaaravaldis võib käskida programmil stringist konkreetset teksti otsida ja seejärel tulemuse vastavalt välja printida. Väljend võib sisaldada

  • Teksti sobitamine
  • Kordamine
  • Hargnemine
  • Muster-kompositsioon jne.

Regulaaravaldis või RegEx in Python on tähistatud kui RE (RE-d, regex-id või regex-mustrid), mille kaudu imporditakse re moodul. Python toetab regulaaravaldist teekide kaudu. RegEx sisse Python toetab erinevaid asju nagu Modifikaatorid, identifikaatorid ja tühikud.

Identifikaatorid Modifikaatorid Tühikumärgid Vajalik põgenemine
\d = suvaline arv (number) \d tähistab numbrit. Näiteks: \d{1,5} see deklareerib numbri vahemikus 1,5, näiteks 424,444,545 XNUMX XNUMX jne. \n = uus rida . + * ? [] $ ^ () {} | \
\D = midagi peale numbri (mittekohaline) + = vastab 1 või enamale \s= tühik
\s = tühik
(tab, tühik, reavahetus jne)
? = vastab 0 või 1 \t =tab
\S= kõike muud kui tühik * = 0 või rohkem \e = põgenemine
\w = tähed (Sobib tähtnumbriline märk, sealhulgas "_") $ vaste stringi lõpule \r = vankri tagastus
\W =kõik peale tähtede (vastab mittetähtnumbrilisele märgile, välja arvatud "_") ^ vaste stringi algus \f= vormivoog
. = kõike muud kui tähed (punktid) | vastab kas või x/y ------
\b = mis tahes märk, välja arvatud uus rida [] = vahemik või dispersioon ------
\. {x} = see eelneva koodi kogus ------

Regulaaravaldise (RE) süntaks

import re
  • "re" moodul kaasas Python kasutatakse peamiselt stringide otsimiseks ja manipuleerimiseks
  • Kasutatakse sageli ka veebilehe jaoks "Kraapimine” (veebisaitidelt suure hulga andmete eraldamine)

Alustame väljendusõpetust selle lihtsa harjutusega, kasutades avaldisi (w+) ja (^).

Näide w+ ja ^ avaldisest

  • "^": See avaldis sobib stringi algusega
  • “w+“: see avaldis vastab stringi tähtnumbrilisele märgile

Siin näeme a Python RegEx Näide selle kohta, kuidas saame oma koodis kasutada w+ ja ^ avaldisi. Me katame funktsiooni re.findall() in Python, hiljem selles õpetuses, kuid mõnda aega keskendume lihtsalt \w+ ja \^ avaldistele.

Näiteks meie stringi "guru99, haridus on lõbus" puhul, kui käivitame koodi klahvidega w+ ja^, annab see väljundi "guru99".

Näide w+ ja ^ avaldisest

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

Pidage meeles, et kui eemaldate w+-st märgi +, muutub väljund ja see annab ainult esimese tähe esimese tähe, st [g]

Näide \s avaldisest funktsioonis re.split

  • “s”: seda väljendit kasutatakse stringis tühiku loomiseks

Et mõista, kuidas see RegEx toimib Python toimib, alustame lihtsast Python RegEx Näide jagatud funktsioonist. Näites oleme iga sõna poolitanud funktsiooniga “re.split” ja samal ajal kasutanud väljendit \s, mis võimaldab iga sõna stringis eraldi sõeluda.

\s avaldis funktsioonis re.split

Kui käivitate selle koodi, annab see teile väljundi ['me, 'oleme', 'jagamine', 'the', 'words'].

Vaatame nüüd, mis juhtub, kui eemaldate "\" s-ilt. Väljundis ei ole 's' tähestikku, kuna oleme stringist eemaldanud tähe '\' ja see hindab s-i tavalise tähemärgina ja jagab seega sõnad pooleks kõikjal, kus ta stringis "s" leiab.

\s avaldis funktsioonis re.split

Samamoodi on mitmeid teisi Python regulaaravaldist, mida saate kasutada mitmel viisil Python nagu \d,\D,$,\.,\b jne.

Siin on täielik kood

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

Järgmisena näeme meetodite tüüpe, mida kasutatakse regulaaravaldisega Python.

Regulaaravaldise meetodite kasutamine

Pakett "re" pakub mitmeid meetodeid sisendstringi päringute tegemiseks. Näeme uuesti sissetuleku meetodeid Python:

  • re.match()
  • re.search()
  • re.findall()

märkused: regulaaravaldiste põhjal Python pakub kahte erinevat primitiivset operatsiooni. Sobivuse meetod kontrollib vastet ainult stringi alguses, samal ajal kui otsing kontrollib vastet mis tahes stringis.

re.match()

re.match() funktsioon uuesti sisse Python otsib regulaaravaldise mustrit ja tagastab esimese esinemise. The Python RegEx Match meetod kontrollib vastet ainult stringi alguses. Seega, kui esimesel real leitakse vaste, tagastab see vaste objekti. Kui aga vaste leitakse mõnel muul real, siis Python Funktsioon RegEx Match tagastab nulli.

Näiteks kaaluge järgmist koodi Python re.match() funktsioon. Väljend "w+" ja "\W" vastavad sõnadele, mis algavad tähega "g" ja pärast seda ei tuvastata kõike, mis ei ole alanud tähega "g". Loendi või stringi iga elemendi sobivuse kontrollimiseks käivitame selles forloopi Python re.match() Näide.

re.match()

re.search(): Mustri leidmine tekstist

re.search() funktsioon otsib regulaaravaldise mustrit ja tagastab esimese esinemise. Erinevalt Python re.match(), kontrollib see kõiki sisendstringi ridu. The Python Funktsioon re.search() tagastab vasteobjekti, kui muster on leitud, ja nulli, kui mustrit ei leitud

Kuidas otsingut () kasutada?

Funktsiooni search() kasutamiseks peate importima Python esmalt re moodul ja seejärel käivitage kood. The Python Funktsioon re.search() võtab meie põhistringist skannimiseks "mustri" ja "teksti".

kasuta otsingut ()

Näiteks otsime siin kahte sõnasõnalist stringi "Tarkvara testimine" "guru99", tekstistringist "Tarkvara Testimine on lõbus". „Tarkvara testimise” jaoks leidsime vaste, seega tagastab see väljundi Python re.search() Näide on "leitud vaste", samas kui sõna "guru99" puhul me ei leidnud stringist, seega tagastab see väljundina "Vastu pole".

re.findall()

leia kõik() moodulit kasutatakse "kõikide" esinemiste otsimiseks, mis vastavad antud mustrile. Seevastu otsingu() moodul tagastab ainult esimese esinemise, mis vastab määratud mustrile. findall() kordab kõiki faili ridu ja tagastab kõik mittekattuvad mustri vasted ühe sammuga.

Kuidas kasutada failis re.findall() Python?

Siin on meil e-posti aadresside loend ja me tahame, et kõik e-posti aadressid tuleks loendist välja tuua, kasutame meetodit re.findall() Python. See leiab loendist kõik e-posti aadressid.

Kasutage re.findall() in Python

Siin on re.findall() näite täielik kood

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 = 'guru99@google.com, careerguru99@hotmail.com, users@yahoomail.com'
emails = re.findall(r'[\w\.-]+@[\w\.-]+', abc)
for email in emails:
    print(email)

Python Lipud

Palju Python Regex meetodid ja Regex funktsioonid võtavad valikulise argumendi nimega lipud. Need lipud võivad antud tähendust muuta Python Regex muster. Nende mõistmiseks näeme ühte või kahte näidet nendest lippudest.

Kasutatud erinevaid lippe Python hõlmab

Regex-lippude süntaks Mida see lipp teeb
[re.M] Tehke algus/lõpp, arvestage iga rida
[re.I] See ignoreerib juhtumit
[re.S] Tee [. ]
[re.U] Tee { \w,\W,\b,\B} järgib Unicode'i reegleid
[re.L] Määrake {\w,\W,\b,\B} lokaadi järgi
[re.X] Luba kommenteerimine Regexis

Näide re.M või Multiline Flags

Mitmerealise mustri märk [^] vastab stringi esimesele märgile ja iga rea ​​algusele (mis järgneb kohe iga reavahetuse järel). Kui avaldist väikest “w” kasutatakse tühiku tähistamiseks tähemärkidega. Koodi käivitamisel prindib esimene muutuja "k1" välja ainult sõna guru99 märgi "g", samas kui lisate mitmerealise lipu, tõmbab see välja kõigi stringi elementide esimesed märgid.

Näide re.M või Multiline Flags

Siin on kood

import re
xx = """guru99 
careerguru99	
selenium"""
k1 = re.findall(r"^\w", xx)
k2 = re.findall(r"^\w", xx, re.MULTILINE)
print(k1)
print(k2)
  • Me deklareerisime muutuja xx stringile ”guru99…”. karjääriguru99… seleen”
  • Käivitage kood ilma mitmerealisi lippe kasutamata, see annab ridadelt väljundiks ainult "g".
  • Käivitage kood lipuga "mitmerealine", kui prindite "k2", annab see väljundiks "g", "c" ja "s"
  • Niisiis, erinevus, mida näeme ülaltoodud näites pärast ja enne mitme rea lisamist.

Samamoodi saate kasutada ka muid Python lipud nagu re.U (Unicode), re.L (jälgi lokaati), re.X (Luba kommenteerida) jne.

Python 2 Näide

Ülaltoodud koodid on Python 3 näidet, kui soovite sisse joosta Python 2 palun kaaluge järgmist koodi.

# 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 = 'guru99@google.com, careerguru99@hotmail.com, users@yahoomail.com'
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

Testi oma Python Teadmised

1. Millist meetodit kasutatakse kõigi mustri esinemiste leidmiseks stringist?

  • re.search()
  • re.match()
  • re.findall()
  • re.split()
Re.findall() kasutatakse kõigi mustri esinemiste leidmiseks stringis.

2. Mida tähistab \d märgiklass regulaaravaldistes?

  • Mis tahes number (0-9)
  • Mis tahes mittekohaline märk
  • Mis tahes tühimärk
  • Mis tahes täht või number
\d tähistab mis tahes numbrit (0-9).

3. Millist funktsiooni kasutaksid stringi tühikute alusel poolitamiseks?

  • re.split(r'\s', string)
  • re.findall(r'\w+', string)
  • re.match(r'\s+', string)
  • re.split(r'\w+', string)
re.split(r'\s', string) poolitab stringi tühikute alusel, kasutades avaldist \s.

4. Mis on peamine erinevus re.match() ja re.search() vahel?

  • re.match() otsib mustrit stringi algusest, re.search() aga mis tahes stringi kohast.
  • re.match() tagastab kõik vasted, re.search() aga esimese vaste.
  • re.search() on kiirem kui re.match().
  • Mõlemad funktsioonid käituvad ühtemoodi.
re.match() otsib mustrit stringi algusest, re.search() aga mis tahes stringi kohast.

kokkuvõte

Regulaaravaldis a-s programmeerimiskeel on spetsiaalne tekstistring, mida kasutatakse otsingumustri kirjeldamiseks. See sisaldab numbreid ja kirjavahemärke ning kõiki erimärke, nagu $#@!% jne. Avaldis võib sisaldada sõnasõna

  • Teksti sobitamine
  • Kordamine
  • Hargnemine
  • Muster-kompositsioon jne.

In Python, on regulaaravaldis tähistatud kui RE (RE-d, regexid või regex-muster) on manustatud läbi Python re moodul.

  • "re" moodul kaasas Python kasutatakse peamiselt stringide otsimiseks ja manipuleerimiseks
  • Kasutatakse sageli ka veebilehtede kraapimiseks (veebisaitidelt suure hulga andmete väljavõtmiseks)
  • Regulaaravaldise meetodid hõlmavad re.match(),re.search()& re.findall()
  • Muu Python RegExi asendusmeetodid on sub() ja subn(), mida kasutatakse re-s sobivate stringide asendamiseks
  • Python Lipud Palju Python Regex meetodid ja Regex funktsioonid võtavad valikulise argumendi nimega lipud
  • Need lipud võivad muuta antud Regexi mustri tähendust
  • Eri Python Regex-meetodites kasutatavad lipud on re.M, re.I, re.S jne.