Dokumentacja modułu Re dla Pythona 3 w . Moduł Re dla wyrażeń regularnych

Wyrażenia regularne są bardzo popularnym składnikiem prawie każdego języka programowania. Pomagają szybko uzyskać dostęp do potrzebnych informacji. W szczególności są używane, gdy konieczne jest przetworzenie tekstu. Python jest domyślnie dostarczany ze specjalnym modułem. re, który jest odpowiedzialny za pracę z wyrażeniami regularnymi.

Dzisiaj porozmawiamy szczegółowo o tym, co to jest w ogóle, jak z nimi pracować i jak moduł re pomoże.

Wyrażenia regularne: wprowadzenie

Jakie są zastosowania wyrażeń regularnych? Prawie wszystko. Na przykład te:

  1. Aplikacje internetowe wymagające weryfikacji tekstu. Typowym przykładem są klienty poczty online.
  2. Wszelkie inne projekty związane z tekstami, bazami danych i tak dalej.

Zanim zaczniemy analizować składnię, powinniśmy bardziej szczegółowo zrozumieć podstawowe zasady działania biblioteki re i ogólnie, co jest w tym ogólnie dobre. Podamy również przykłady z realnej praktyki, gdzie opiszemy mechanizm ich wykorzystania. Możesz stworzyć taki szablon, odpowiedni do wykonywania różnorodnych operacji na tekście.

Co to jest szablon w bibliotece Re?

Dzięki niemu możesz wyszukiwać informacje różnego typu, uzyskiwać odpowiadające im informacje, aby inne funkcje były bardziej adaptacyjne. I oczywiście do przetwarzania tych danych.

Na przykład weź następujący szablon: s+. Oznacza dowolny znak spacji. Jeśli dodasz do niego znak plus, oznacza to, że wzór zawiera więcej niż jedną spację. Może nawet dopasować znaki tabulacji, które są wywoływane za pomocą t+.

Przed użyciem musisz zaimportować bibliotekę Re. Następnie używamy specjalnego polecenia, aby skompilować szablon. Odbywa się to w dwóch krokach.

>>> importuj ponownie

>>> regex = re.kompilacja('s+')

W szczególności ten kod wykonuje operację kompilowania szablonu, którego można użyć. na przykład, aby wyszukać spacje (jedną lub więcej).

Uzyskiwanie oddzielnych informacji z różnych ciągów za pomocą wyrażeń regularnych

Załóżmy, że mamy zmienną zawierającą następujące informacje.

>>> tekst = „””100 INF Informatyka

213 Matematyka MAT  

156 POL Polski»»»

Zawiera trzy kursy szkoleniowe. Każdy z nich składa się z trzech części – numeru, kodu i nazwy. Widzimy, że odstęp między tymi słowami jest inny. Co zrobić, aby rozbić tę linię na osobne liczby i słowa? Istnieją dwie metody osiągnięcia tego celu:

  1. wywołać funkcję ponownie.split.
  2. zastosuj funkcję dzielić dla regex.

Oto przykład użycia składni każdej z metod dla naszej zmiennej.

>>> re.split('s+', tekst)  

# lub

>>> regex.split(tekst)

Dane wyjściowe: ['100', 'INF', 'Informatyka', '213', 'MAT', 'Math', '156', 'ENG', 'English']

Ogólnie można zastosować obie metody. Ale w rzeczywistości znacznie łatwiej jest użyć wyrażenia regularnego niż wielokrotnie używać funkcji. ponownie.split.

Znajdowanie dopasowań za pomocą trzech funkcji

Powiedzmy, że z ciągu znaków musimy wyodrębnić tylko liczby. Co należy w tym celu zrobić?

ponownie.znajdź()

Oto przypadek użycia funkcji Znajdź wszystko(), który wraz z wyrażeniami regularnymi pozwala wyodrębnić wystąpienia jednej lub więcej liczb ze zmiennej tekstowej.

>>> drukuj(tekst)  

100 INF Informatyka

213 Matematyka MAT  

156 POL Polski

>>> regex_num = re.kompilacja('d+')  

>>> regex_num.findall(tekst)  

['100', '213', '156']

Wraz z symbolem d użyliśmy szablonu, który wskazuje absolutnie dowolną wartość liczbową znajdującą się w zmiennej lub tekście. A skoro dodaliśmy tam jeden +, oznacza to, że przynajmniej jedna liczba musi być obecna. 

Możesz również użyć znaku *, aby określić, że obecność cyfry nie jest wymagana do znalezienia dopasowania.

Ale w naszym przypadku, ponieważ użyliśmy +, wyodrębniliśmy z Znajdź wszystko() 1 lub więcej cyfrowych oznaczeń kursów z tekstu. Tak więc w naszym przypadku wyrażenia regularne działają jako ustawienia funkcji.

re.search() vs rewanż()

Jak można się domyślić z nazwy funkcji, pierwsza szuka dopasowania w tekście. Pytanie: Jaka jest różnica między? Znajdź wszystko? Chodzi o to, że zwraca konkretny obiekt pasujący do wzorca, a nie całą sekwencję znalezionych wyników w postaci listy, jak poprzednia funkcja.

Z kolei funkcja re.match robi to samo. Tylko składnia jest inna. Szablon należy umieścić na początku. 

Weźmy przykład, który to pokazuje.

>>> # utwórz zmienną z tekstem

>>> tekst2 = «»»Informatyka INF

213 MAT Matematyka 156″»»  

>>> # skompiluj wyrażenie regularne i poszukaj wzorców

>>> regex_num = re.kompilacja('d+')  

>>> s = regex_num.search(text2)  

>>> print('Pierwszy indeks: ', s.start())  

>>> print('Ostatni indeks: ', s.end())  

>>> print(text2[s.start():s.end()]) 

Pierwszy indeks: 17 

Ostatni indeks: 20

213

Jeśli chcesz uzyskać podobny wynik w inny sposób, możesz użyć funkcji Grupa().

Zastąpienie części tekstu biblioteką Re

Aby zastąpić tekst, użyj funkcji resub(). Załóżmy, że nasza lista kursów trochę się zmieniła. Widzimy, że po każdej wartości cyfrowej mamy zakładkę. Naszym zadaniem jest połączenie całej tej sekwencji w jedną linię. Aby to zrobić, musimy zastąpić wyrażenie s+ zdać 

Oryginalny tekst brzmiał:

# utwórz zmienną z tekstem

>>> tekst = „””100 INF t Informatyka

213 MAT t Matematyka  

156 POL t Polski»»»  

>>> drukuj(tekst)  

100 INFORMACJI Informatyka

213 XNUMX XNUMX XNUMX MAT matematyka  

156 ENG Angielski

Aby wykonać żądaną operację, użyliśmy następujących wierszy kodu.

# zamień jedną lub więcej spacji na 1

>>> regex = re.kompilacja('s+')  

>>> print(regex.sub(' ', tekst))  

W rezultacie mamy jedną linię. 

101 COM Computers 205 MAT Matematyka 189 ENG Polski

Rozważmy teraz inny problem. Nie stoimy przed zadaniem umieszczania przestrzeni. O wiele ważniejsze jest dla nas, aby wszystkie nazwy kursów zaczynały się od nowej linii. W tym celu używane jest inne wyrażenie, które dodaje znak nowej linii do wyjątku. Co to za ekspresja?

Biblioteka Re obsługuje funkcję, taką jak dopasowanie negatywne. Różni się od bezpośredniego tym, że zawiera wykrzyknik przed ukośnikiem. To znaczy, jeśli musimy pominąć znak nowej linii, musimy napisać !n zamiast n.

Otrzymujemy następujący kod.

# usuń wszystkie spacje z wyjątkiem nowej linii  

>>> regex = re.compile('((?!n)s+)')  

>>> print(regex.sub(' ', tekst))  

100 INF Informatyka

213 Matematyka MAT  

156 POL Polski

Co to są grupy wyrażeń regularnych?

Za pomocą grup wyrażeń regularnych możemy uzyskać pożądane obiekty w postaci oddzielnych elementów, a nie w jednej linii. 

Załóżmy, że musimy uzyskać numer kursu, kod i nazwę nie w jednym wierszu, ale jako oddzielne elementy. Aby wykonać zadanie, będziesz musiał napisać ogromną liczbę niepotrzebnych wierszy kodu. 

W rzeczywistości zadanie można znacznie uprościć. Możesz skompilować szablon dla wszystkich wpisów i po prostu określić dane, które chcesz uzyskać z nawiasów.

Będzie bardzo mała liczba linii. 

# utwórz grupy szablonów tekstowych kursu i wyodrębnij je

>>> wzorzec_kursu = '([0-9]+)s*([A-ZY]{3})s*([a-zA-ZoY]{4,})'  

>>> re.findall(wzór_kursu, tekst)  

[('100', 'INF', 'Informatyka'), ('213', 'MAT', 'Matematyka'), ('156', 'ENG', 'angielski')]

Pojęcie „chciwego” dopasowania

Standardowo wyrażenia regularne są zaprogramowane tak, aby wyodrębnić maksymalną ilość pasujących danych. A nawet jeśli potrzebujesz znacznie mniej.

Spójrzmy na przykładowy kod HTML, w którym musimy pobrać tag.

>>> text = „Przykład dopasowywania zachłannych wyrażeń regularnych”  

>>> re.findall('', tekst)  

['Przykład dopasowywania zachłannych wyrażeń regularnych']

Zamiast wyodrębniać tylko jeden znacznik, Python otrzymał cały ciąg. Dlatego nazywa się to chciwym.

A co zrobić, żeby dostać tylko metkę? W takim przypadku musisz użyć leniwego dopasowania. Aby określić takie wyrażenie, na końcu wzorca dodawany jest znak zapytania.

Otrzymasz następujący kod i dane wyjściowe interpretera.

>>> re.findall('', tekst)  

[”, ”]

Jeżeli wymagane jest pobranie tylko pierwszego napotkanego wystąpienia, wówczas stosowana jest metoda Szukaj ().

re.search('', tekst).group()  

"

Wtedy zostanie znaleziony tylko tag otwierający.

Popularne szablony wyrażeń

Oto tabela zawierająca najczęściej używane wzorce wyrażeń regularnych.

Dokumentacja modułu Re dla Pythona 3 w . Moduł Re dla wyrażeń regularnych

Wnioski

Rozważaliśmy tylko najbardziej podstawowe metody pracy z wyrażeniami regularnymi. W każdym razie widziałeś, jak są ważne. I tutaj nie ma znaczenia, czy konieczne jest parsowanie całego tekstu, czy poszczególnych jego fragmentów, czy konieczne jest przeanalizowanie wpisu w serwisie społecznościowym, czy zbieranie danych w celu późniejszego przetworzenia. Wyrażenia regularne są niezawodnym pomocnikiem w tej kwestii.

Pozwalają na wykonywanie zadań takich jak:

  1. Określanie formatu danych, np. adresu e-mail lub numeru telefonu.
  2. Zdobycie sznurka i rozbicie go na kilka mniejszych.
  3. Wykonuj różne operacje z tekstem, takie jak wyszukiwanie, wydobywanie potrzebnych informacji lub zastępowanie części znaków.

Wyrażenia regularne pozwalają również na wykonywanie nietrywialnych operacji. Na pierwszy rzut oka opanowanie tej nauki nie jest łatwe. Ale w praktyce wszystko jest ustandaryzowane, więc wystarczy raz to rozgryźć, po czym to narzędzie może być używane nie tylko w Pythonie, ale także w dowolnym innym języku programowania. Nawet Excel używa wyrażeń regularnych do automatyzacji przetwarzania danych. Więc grzechem jest nie używać tego narzędzia.

Dodaj komentarz