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

⚡ Nutikas kokkuvõte

Python Regulaaravaldiste õpetus hõlmab praktiliste näidete abil uuesti sobitamist, uuesti otsimist, uuesti leidmist ja uuesti jagamist. LessNeed selgitavad metamärke, märgiklasse, rühmi, lippe, asendusi ja teksti parsimise ning valideerimise levinumaid mustreid.

  • 🔤 mooduli ümberkirjutamine: Impordi re, et saada regulaaravaldiste ülesannete jaoks vaste-, otsingu-, otsingu-, jagamis-, alam- ja kompileerimisfunktsioone.
  • 📐 Metategelased: Mustrid ühendavad punkti-, tärni-, pluss-, ankru- ja märgiklasse, et väljendada paindlikke stringireegleid.
  • 🎯 vaste vs otsing: leiab vaste ankrutele stringi alguses, samas kui otsing skannib kogu stringi esimese vaste leidmiseks.
  • ???? leia kõik ja jaga: findall tagastab iga mittekattuva väärtuseping „match;split“ katkestab stringi regulaaravaldise piiridel.
  • 🔁 Asendus: re.sub vahetab vasted uue teksti või täpsemate tekstiteisenduste jaoks tagasihelistamisfunktsiooniga.
  • 🤖 AI regulaaravaldiste abi: Tehisintellekti assistendid genereerivad ja selgitavad Python regulaaravaldiste mustrid, vähendades katse-eksituse aega.

Python Regulaaravaldise õpetus

Milles on regulaaravaldis Python?

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

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 "Armping” (nttracsuur hulk andmeid veebisaitidelt)

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õigi antud mustrile vastavate esinemiste otsimiseks. Seevastu search() moodul tagastab ainult esimese esinemise, mis vastab määratud mustrile. findall() itereerib läbi kõik faili read ja tagastab kõik mittekattuvadping 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.

KKK

Funktsioon re.match tagastab vasteobjekti ainult siis, kui muster sobib stringi alguses. Funktsioon re.search skannib kogu stringi ja tagastab esimese vaste suvalises asukohas.

Jah. Tehisintellekti tööriistad nagu ChatGPT, Copilot ja regulaaravaldistele omased assistendid genereerivad mustreid lihtsast keelest, selgitavad jäädvustusi ja tõlgivad regulaaravaldisi keelte vahel, tuues samal ajal välja levinud lõksud.

Tehisintellekti tööriistad tõstavad esile iga metamärgi, simuleerivad vasteid samm-sammult ja pakuvad välja parandusi. Need tuvastavad ahnete kvantorite probleemid, puuduvad paomärgid ja soovitavad vajadusel eelvaateid.

Kasuta funktsiooni re.split(pattern, string). See tagastab vastete vahel olevate alamstringide loendi. Muster saab eraldajaid rühmadena jäädvustada ja jäädvustatud eraldajad tulemusse lisada.

Kutsu välja re.sub(muster, asendus, string). Asendus võib olla literaalstring tagasiviidetega, näiteks \\1, või funktsioon, mis tagastab iga vasteobjekti põhjal arvutatud teksti.

Lipud muudavad mustri käitumist. re.IGNORECASE sobitab suur- ja väiketähti vaheldumisi. re.MULTILINE paneb ^ ja $ sobima rea ​​piiridega, mitte ainult stringi piiridega.

Jah. Katastroofiline selgtracPesastatud kvantorite puhul võib interpretaatori töö katkestada. Väldi mustreid nagu (a+)+, eelista võimaluse korral aatomrühmi ja piira sisendi suurust enne regulaaravaldise hindamist.

re.compile tagastab kompileeritud mustriobjekti. Sama mustri taaskasutamine paljude stringide vahel on kiirem, kuna kompileerimine toimub ainult üks kord. See muudab regulaaravaldiste kasutamise koodis ka selgemaks.

Võta see postitus kokku järgmiselt: