Slika avtorja
Z regularnimi izrazi (RegEx), zlasti v Pythonu, imam odnos ljubezni in sovraštva. Všeč mi je, kako lahko izvlečeš ali povežeš nize, ne da bi napisal več logičnih funkcij. Je celo boljša od funkcije iskanja nizov.
Ni mi všeč, kako se težko naučim in razumem vzorce RegEx. Znam se ukvarjati s preprostim ujemanjem nizov, kot je ekstrahiranje vseh alfanumeričnih znakov in čiščenje besedila za NLP naloge. Stvari postanejo težje, ko gre za pridobivanje naslovov IP, e-pošte in ID-jev iz neželenega besedila. Za ekstrahiranje zahtevanega elementa morate napisati zapleten vzorec niza RegEx.
Da bi zapletene naloge RegEx poenostavili, se bomo seznanili s preprostim paketom Python, imenovanim predizraz. Poleg tega si bomo ogledali tudi nekaj primerov pridobivanja datumov in e-poštnih sporočil iz dolgega niza besedila.
Pregex je API višje ravni, zgrajen na vrhu modula `re`. Je RegEx brez zapletenih vzorcev RegEx, ki programerju olajša razumevanje in zapomnitev regularnih izrazov. Poleg tega vam ni treba združevati vzorcev ali ubežati metaznakov in je modularen.
Knjižnico lahko preprosto namestite s PIP.
pip install pregex
Za preizkus zmogljive funkcionalnosti PRegExa bomo uporabili spremenjeno vzorčno kodo iz Dokumentacija.
V spodnjem primeru ekstrahiramo URL HTTP ali naslov IPv4 s številko vrat. Za to nam ni treba ustvarjati zapletene logike. Uporabimo lahko vgrajeni funkciji `HttpUrl` in `IPv4`.
- Ustvarite številko vrat z AnyDigit(). Prva številka vrat ne sme biti nič, naslednje tri števke pa so lahko poljubne številke.
- Uporabite Either(), če želite dodati več logik za ekstrahiranje, bodisi URL HTTP ali naslov IP s številko vrat.
from pregex.core.pre import Pregex
from pregex.core.classes import AnyDigit
from pregex.core.operators import Either
from pregex.meta.essentials import HttpUrl, IPv4 port_number = (AnyDigit() - '0') + 3 * AnyDigit() pre = Either( HttpUrl(capture_domain=True, is_extensible=True), IPv4(is_extensible=True) + ':' + port_number
)
Uporabili bomo dolg niz besedila z znaki in opisi.
text = """IPV4--192.168.1.1:8000-- address--https://www.abid.works-- website--https://kdnuggets.com--text"""
Preden ekstrahiramo ujemajoči se niz, si poglejmo vzorec RegEx.
regex_pattren = pre.get_pattern()
print(regex_pattren)
izhod
Kot lahko vidimo, je težko prebrati ali celo razumeti, kaj se dogaja. Tukaj blesti PRegEx. Da vam zagotovimo človeku prijazen API za izvajanje kompleksnih nalog regularnih izrazov.
(?:https?://)?(?:www.)?(?:[a-zdA-Z][a-z-dA-Z]{,61}[a-zdA-Z].)*([a-zdA-Z][a-z-dA-Z]{,61}[a-zdA-Z]).[a-z]{2,6}(?::d{1,4})?(?:/[!-.0-~]+)*/?(?:(?=[!-/[-`{-~:-@])|(?=w))|(?:(?:d|[1-9]d|1d{2}|2(?:[0-4]d|5[0-5])).){3}(?:d|[1-9]d|1d{2}|2(?:[0-4]d|5[0-5])):[1-9]d{3}
Tako kot `re.match`, bomo uporabili `.get_matches(text)` za ekstrahiranje zahtevanega niza.
results = pre.get_matches(text)
print(results)
izhod
Izluščili smo naslov IP s številko vrat in dva spletna URL-ja.
['192.168.1.1:8000', 'https://www.abid.works', 'https://kdnuggets.com']
Oglejmo si nekaj primerov, kjer lahko razumemo celoten potencial PRegExa.
V tem primeru bomo iz spodnjega besedila izvlekli določene vrste vzorcev datumov.
text = """ 04-15-2023 2023-08-15 06-20-2023 06/24/2023 """
Z uporabo Exactly() in AnyDigit() bomo ustvarili dan, mesec in leto datuma. Dan in mesec imata dve števki, leto pa štiri števke. Ločeni so s pomišljaji »-«.
Ko ustvarimo vzorec, bomo zagnali `get_match`, da ekstrahiramo ujemajoči se niz.
from pregex.core.classes import AnyDigit
from pregex.core.quantifiers import Exactly day_or_month = Exactly(AnyDigit(), 2) year = Exactly(AnyDigit(), 4) pre = ( day_or_month + "-" + day_or_month + "-" + year
) results = pre.get_matches(text)
print(results)
izhod
['04-15-2023', '06-20-2023']
Oglejmo si vzorec RegEx z uporabo funkcije `get_pattern()`.
regex_pattren = pre.get_pattern()
print(regex_pattren)
izhod
Kot lahko vidimo, ima preprosto sintakso RegEx.
d{2}-d{2}-d{4}
Drugi primer je nekoliko zapleten, kjer bomo iz neželenega besedila izluščili veljavne e-poštne naslove.
text = """ user1@abid.works editorial@@kdnuggets.com lover@python.gg. editorial1@kdnuggets.com """
- Ustvarite uporabnik vzorec z `OneOrMore()`. Za odstranitev znaka »@« in presledka iz logike bomo uporabili `AnyButFrom()`.
- Podobno kot a uporabnik vzorec ustvarimo a podjetje vzorec z odstranitvijo dodatnega znaka ».« iz logike.
- Za domena, uporabili bomo `MatchAtLineEnd()` za začetek iskanja od konca s poljubnima dvema ali več znaki razen »@«, presledka in pike.
- Združite vse tri, da ustvarite končni vzorec: uporabnik@podjetje.domena.
from pregex.core.classes import AnyButFrom
from pregex.core.quantifiers import OneOrMore, AtLeast
from pregex.core.assertions import MatchAtLineEnd user = OneOrMore(AnyButFrom("@", ' '))
company = OneOrMore(AnyButFrom("@", ' ', '.'))
domain = MatchAtLineEnd(AtLeast(AnyButFrom("@", ' ', '.'), 2)) pre = ( user + "@" + company + '.' + domain
) results = pre.get_matches(text)
print(results)
izhod
Kot lahko vidimo, je PRegEx identificiral dva veljavna e-poštna naslova.
['user1@abid.works', 'editorial1@kdnuggets.com']
Opomba: oba primera kode sta spremenjeni različici dela avtorja PyCoach.
Če ste podatkovni znanstvenik, analitik ali NLP navdušenec, bi morali uporabiti PRegEx za čiščenje besedila in ustvarjanje preproste logike. Zmanjšalo bo vašo odvisnost od ogrodij NLP, saj je večino ujemanja mogoče izvesti s preprostim API-jem.
V tej mini vadnici smo spoznali paket Python PRegEx in njegove primere uporabe s primeri. Več lahko izveste tako, da preberete uradno Dokumentacija ali reševanje a uganka težava pri uporabi programabilnih regularnih izrazov.
Abid Ali Awan (@1abidaliawan) je certificiran strokovnjak za podatkovne znanstvenike, ki rad gradi modele strojnega učenja. Trenutno se osredotoča na ustvarjanje vsebin in pisanje tehničnih blogov o strojnem učenju in tehnologijah podatkovne znanosti. Abid ima magisterij iz tehnološkega managementa in diplomo iz telekomunikacijskega inženiringa. Njegova vizija je zgraditi izdelek AI z uporabo grafične nevronske mreže za študente, ki se borijo z duševnimi boleznimi.
- Distribucija vsebine in PR s pomočjo SEO. Okrepite se še danes.
- Platoblockchain. Web3 Metaverse Intelligence. Razširjeno znanje. Dostopite tukaj.
- vir: https://www.kdnuggets.com/2023/02/python-string-matching-without-complex-regex-syntax.html?utm_source=rss&utm_medium=rss&utm_campaign=python-string-matching-without-complex-regex-syntax
- 1
- 11
- 7
- 9
- a
- O meni
- Dodatne
- Naslov
- naslovi
- AI
- vsi
- Analitik
- in
- API
- spodaj
- Boljše
- Bit
- blogi
- izgradnjo
- Building
- zgrajena
- vgrajeno
- se imenuje
- primeri
- nekatere
- Certified
- značaja
- znaki
- razredi
- čiščenje
- Koda
- COM
- podjetje
- kompleksna
- vsebina
- Core
- par
- ustvarjajo
- Ustvarjanje
- Oblikovanje
- Trenutno
- datum
- znanost o podatkih
- podatkovni znanstvenik
- Datum
- Termini
- dan
- ponudba
- Stopnja
- Odvisnost
- Digit
- števk
- domena
- dont
- bodisi
- E-naslov
- e-pošta
- Inženiring
- navdušenec
- zlasti
- Osnove
- Eter (ETH)
- Tudi
- točno
- Primer
- Primeri
- Razen
- izrazi
- ekstrakt
- Nekaj
- končna
- prva
- osredotoča
- okviri
- iz
- polno
- funkcija
- funkcionalnost
- funkcije
- Poleg tega
- dobili
- dogaja
- graf
- Grafična nevronska mreža
- skupina
- Trdi
- drži
- Kako
- HTML
- HTTPS
- identificirati
- bolezen
- uvoz
- in
- namestitev
- IP
- IP naslov
- IP naslovi
- IT
- KDnuggets
- UČITE
- naučili
- učenje
- Knjižnica
- Long
- Poglej
- ljubezen
- stroj
- strojno učenje
- Znamka
- upravljanje
- mojster
- Stave
- ujemanje
- duševne
- Mentalna bolezen
- Meta
- modeli
- spremembe
- Modularna
- modul
- mesec
- več
- Najbolj
- več
- mreža
- Nevronski
- nevronska mreža
- Naslednja
- nlp
- Številka
- Uradni
- operaterji
- paket
- Vzorec
- vzorci
- izvajati
- platon
- Platonova podatkovna inteligenca
- PlatoData
- potencial
- močan
- problem
- Izdelek
- strokovni
- Programmer
- zagotavljajo
- Python
- Preberi
- reading
- zmanjša
- redni
- Razmerje
- ne pozabite
- odstrani
- odstranjevanje
- obvezna
- Rezultati
- Run
- Znanost
- Znanstvenik
- Iskalnik
- drugi
- shouldnt
- Enostavno
- preprosto
- Reševanje
- Vesolje
- Začetek
- stop
- Boriti se
- Študenti
- taka
- sintaksa
- Naloge
- tehnični
- Tehnologije
- Tehnologija
- telekomunikacije
- Test
- O
- stvari
- 3
- do
- vrh
- Navodila
- razumeli
- URL
- uporaba
- uporabnik
- Vizija
- web
- Kaj
- Kaj je
- WHO
- bo
- brez
- delo
- deluje
- pisati
- pisanje
- leto
- Vaša rutina za
- zefirnet
- nič