Zdjęcie autora
Mam związek miłości i nienawiści z wyrażeniami regularnymi (RegEx), szczególnie w Pythonie. Uwielbiam sposób wyodrębniania lub dopasowywania ciągów znaków bez pisania wielu funkcji logicznych. Jest nawet lepsza niż funkcja wyszukiwania ciągów.
Nie podoba mi się to, że trudno mi nauczyć się i zrozumieć wzorce RegEx. Potrafię poradzić sobie z prostym dopasowywaniem ciągów, takim jak wyodrębnianie wszystkich znaków alfanumerycznych i czyszczenie tekstu na potrzeby zadań NLP. Sprawa staje się trudniejsza, jeśli chodzi o wyodrębnianie adresów IP, e-maili i identyfikatorów ze śmieciowych tekstów. Aby wyodrębnić wymagany element, musisz napisać złożony wzorzec RegEx String.
Aby uprościć złożone zadania RegEx, poznamy prosty pakiet Pythona o nazwie pregeks. Ponadto przyjrzymy się także kilku przykładom wyodrębniania dat i wiadomości e-mail z długiego ciągu tekstu.
Pregex to API wyższego poziomu zbudowane na bazie modułu `re`. Jest to RegEx bez skomplikowanych wzorców RegEx, które ułatwiają każdemu programiście zrozumienie i zapamiętanie wyrażeń regularnych. Co więcej, nie trzeba grupować wzorców ani uciekać przed metaznakami, a ponadto jest to modułowe.
Możesz po prostu zainstalować bibliotekę za pomocą PIP.
pip install pregex
Aby przetestować potężną funkcjonalność PRegEx, użyjemy zmodyfikowanego przykładowego kodu z pliku dokumentacja.
W poniższym przykładzie wyodrębniamy adres URL HTTP lub adres IPv4 z numerem portu. Nie musimy do tego tworzyć skomplikowanej logiki. Możemy skorzystać z wbudowanych funkcji `HttpUrl` i `IPv4`.
- Utwórz numer portu za pomocą AnyDigit(). Pierwsza cyfra portu nie powinna wynosić zero, a kolejne trzy cyfry mogą być dowolną liczbą.
- Użyj opcji Albo(), aby dodać wiele logiki do wyodrębnienia, albo adres URL HTTP, albo adres IP z numerem portu.
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
)
Będziemy używać długiego ciągu tekstowego ze znakami i opisami.
text = """IPV4--192.168.1.1:8000-- address--https://www.abid.works-- website--https://kdnuggets.com--text"""
Zanim wyodrębnimy pasujący ciąg, przyjrzyjmy się wzorowi RegEx.
regex_pattren = pre.get_pattern()
print(regex_pattren)
Wydajność
Jak widać, ciężko jest przeczytać, a nawet zrozumieć, co się dzieje. To właśnie tutaj PREgEx błyszczy. Aby zapewnić przyjazny dla człowieka interfejs API do wykonywania złożonych zadań związanych z wyrażeniami regularnymi.
(?: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}
Podobnie jak w przypadku `re.match`, użyjemy `.get_matches(text)` do wyodrębnienia wymaganego ciągu.
results = pre.get_matches(text)
print(results)
Wydajność
Wyodrębniliśmy zarówno adres IP z numerem portu, jak i dwa adresy internetowe.
['192.168.1.1:8000', 'https://www.abid.works', 'https://kdnuggets.com']
Przyjrzyjmy się kilku przykładom, w których możemy zrozumieć pełny potencjał PREgEx.
W tym przykładzie wyodrębnimy pewne rodzaje wzorców dat z poniższego tekstu.
text = """ 04-15-2023 2023-08-15 06-20-2023 06/24/2023 """
Używając Dokładnie() i AnyDigit(), utworzymy dzień, miesiąc i rok daty. Dzień i miesiąc mają dwie cyfry, a rok ma 4 cyfry. Są one oddzielone myślnikami „-”.
Po utworzeniu wzorca uruchomimy polecenie `get_match`, aby wyodrębnić pasujący ciąg.
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)
Wydajność
['04-15-2023', '06-20-2023']
Przyjrzyjmy się wzorowi RegEx za pomocą funkcji „get_pattern()”.
regex_pattren = pre.get_pattern()
print(regex_pattren)
Wydajność
Jak widzimy, ma prostą składnię RegEx.
d{2}-d{2}-d{4}
Drugi przykład jest nieco skomplikowany i polega na wyodrębnieniu prawidłowych adresów e-mail ze śmieci.
text = """ user1@abid.works editorial@@kdnuggets.com lover@python.gg. editorial1@kdnuggets.com """
- Stwórz użytkownik wzór z „OneOrMore()”. Użyjemy `AnyButFrom()`, aby usunąć „@” i spację z logiki.
- Podobny do a użytkownik wzór, który tworzymy a sukcesy firma wzór poprzez usunięcie dodatkowego znaku „.” od logiki.
- Dla domena, użyjemy funkcji `MatchAtLineEnd()`, aby rozpocząć wyszukiwanie od końca za pomocą dowolnych dwóch lub więcej znaków z wyjątkiem „@”, spacji i kropki.
- Połącz wszystkie trzy, aby stworzyć ostateczny wzór: użytkownik@firma.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)
Wydajność
Jak widzimy, PRegEx zidentyfikował dwa prawidłowe adresy e-mail.
['user1@abid.works', 'editorial1@kdnuggets.com']
Uwaga: oba przykłady kodu są zmodyfikowanymi wersjami work by PyCoach.
Jeśli jesteś analitykiem danych, analitykiem lub entuzjastą NLP, powinieneś użyć PRegEx do oczyszczenia tekstu i stworzenia prostej logiki. Zmniejszy to Twoją zależność od frameworków NLP, ponieważ większość dopasowań można wykonać za pomocą prostego API.
W tym mini tutorialu poznaliśmy pakiet PRegEx w języku Python i jego przypadki użycia wraz z przykładami. Możesz dowiedzieć się więcej, czytając oficjalne informacje dokumentacja lub rozwiązanie a słowo problem z używaniem programowalnych wyrażeń regularnych.
Abid Ali Awan (@ 1abidaliawan) jest certyfikowanym specjalistą ds. analityków danych, który uwielbia tworzyć modele uczenia maszynowego. Obecnie koncentruje się na tworzeniu treści i pisaniu blogów technicznych na temat technologii uczenia maszynowego i data science. Abid posiada tytuł magistra zarządzania technologią oraz tytuł licencjata inżynierii telekomunikacyjnej. Jego wizją jest zbudowanie produktu AI z wykorzystaniem grafowej sieci neuronowej dla studentów zmagających się z chorobami psychicznymi.
- Dystrybucja treści i PR oparta na SEO. Uzyskaj wzmocnienie już dziś.
- Platoblockchain. Web3 Inteligencja Metaverse. Wzmocniona wiedza. Dostęp tutaj.
- Źródło: 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 nas
- Dodatkowy
- adres
- Adresy
- AI
- Wszystkie kategorie
- analityk
- i
- api
- poniżej
- Ulepsz Swój
- Bit
- blogi
- budować
- Budowanie
- wybudowany
- wbudowany
- nazywa
- Etui
- pewien
- Dyplomowani
- charakter
- znaków
- Klasy
- Sprzątanie
- kod
- COM
- sukcesy firma
- kompleks
- zawartość
- rdzeń
- Para
- Stwórz
- Tworzenie
- tworzenie
- Obecnie
- dane
- nauka danych
- naukowiec danych
- Data
- Daty
- dzień
- sprawa
- Stopień
- Zależność
- Cyfra
- cyfry
- domena
- nie
- bądź
- e-maile
- Inżynieria
- entuzjasta
- szczególnie
- Essentials
- Eter (ETH)
- Parzyste
- dokładnie
- przykład
- przykłady
- Z wyjątkiem
- wyrażeń
- wyciąg
- kilka
- finał
- i terminów, a
- skupienie
- Ramy
- od
- pełny
- funkcjonować
- Funkcjonalność
- Funkcje
- Ponadto
- otrzymać
- będzie
- wykres
- Wykres sieci neuronowej
- Zarządzanie
- Ciężko
- posiada
- W jaki sposób
- HTML
- HTTPS
- zidentyfikowane
- choroba
- importować
- in
- zainstalować
- IP
- Adres IP
- Adresy IP
- IT
- Knuggety
- UCZYĆ SIĘ
- dowiedziałem
- nauka
- Biblioteka
- długo
- Popatrz
- miłość
- maszyna
- uczenie maszynowe
- robić
- i konserwacjami
- mistrz
- Mecz
- dopasowywanie
- psychika
- Choroba umysłowa
- Meta
- modele
- zmodyfikowano
- Modułowa
- moduł
- Miesiąc
- jeszcze
- większość
- wielokrotność
- sieć
- Nerwowy
- sieci neuronowe
- Następny
- nlp
- numer
- urzędnik
- operatorzy
- pakiet
- Wzór
- wzory
- wykonywania
- plato
- Analiza danych Platona
- PlatoDane
- potencjał
- mocny
- Problem
- Produkt
- profesjonalny
- Programista
- zapewniać
- Python
- Czytaj
- Czytający
- zmniejszyć
- regularny
- związek
- pamiętać
- usunąć
- usuwanie
- wymagany
- Efekt
- run
- nauka
- Naukowiec
- Szukaj
- druga
- powinien
- Prosty
- po prostu
- Rozwiązywanie
- Typ przestrzeni
- początek
- Stop
- Walka
- Studenci
- taki
- składnia
- zadania
- Techniczny
- Technologies
- Technologia
- telekomunikacja
- test
- Połączenia
- rzeczy
- trzy
- do
- Top
- Tutorial
- zrozumieć
- URL
- posługiwać się
- Użytkownik
- wizja
- sieć
- Co
- Co to jest
- KIM
- będzie
- bez
- Praca
- działa
- napisać
- pisanie
- rok
- Twój
- zefirnet
- zero