Wyrażenia regularne w Pythonie [z przykładami]: jak zaimplementować?

Opublikowany: 2021-01-29

Podczas przetwarzania surowych danych z dowolnego źródła ważne jest wyodrębnienie właściwych informacji, aby można było uzyskać z danych znaczący wgląd. Czasami trudno jest wydobyć z danych określony wzorzec, zwłaszcza w przypadku danych tekstowych.

Dane tekstowe składają się z akapitów informacji zebranych za pośrednictwem formularzy ankiet, serwisów złomowych i innych źródeł. Channing różnych akcesorów ciągów za pomocą funkcji pandy lub innych funkcji niestandardowych może wykonać pracę, ale co, jeśli trzeba uzyskać bardziej konkretny wzór? Wyrażenia regularne wykonują tę pracę z łatwością.

Spis treści

Co to jest wyrażenie regularne (regEx)?

Wyrażenie regularne to reprezentacja zestawu znaków dla łańcuchów. Przedstawia uogólnioną formułę dla określonego wzorca w ciągach, która pomaga w segregacji właściwych informacji z puli danych. Wyrażenie zwykle składa się z symboli lub znaków, które pomagają w tworzeniu reguły, ale na pierwszy rzut oka może wydawać się dziwne i trudne do uchwycenia. Te symbole mają powiązane znaczenia, które opisano tutaj.

Ucz się kursów nauki o danych z najlepszych światowych uniwersytetów. Zdobywaj programy Executive PG, Advanced Certificate Programs lub Masters Programs, aby przyspieszyć swoją karierę.

Metaznaki w RegEx

  1. '.': to symbol wieloznaczny, dopasowuje pojedynczy znak (dowolny znak, ale tylko raz)
  2. ^: oznacza początek ciągu
  3. $: oznacza koniec ciągu
  4. [ ]: dopasowuje jeden z zestawów znaków w [ ]
  5. [az]: dopasowuje jeden z zakresu znaków a,b,…,z
  6. [^abc] : dopasowuje znak, który nie jest a,b lub c.
  7. a|b: dopasowuje a lub b, gdzie a i b to łańcuchy
  8. () : zapewnia zakres dla operatorów
  9. \ : włącza escape dla znaków specjalnych (\t, \n, \b, \.)
  10. \b: pasuje do granicy słowa
  11. \d : dowolna cyfra, równoważna [0-9]
  12. \D: dowolna cyfra, równoważna [^0-9]
  13. \s : dowolna spacja, równoważna [ \t\n\r\f\v]
  14. \S : dowolna nie-biała spacja, równoważna [^\t\n\r\f\v]
  15. \w : dowolny alfanumeryczny, odpowiednik [a-zA-Z0-9_]
  16. \W : dowolny niealfanumeryczny, odpowiednik [^a-zA-Z0-9_]
  17. '*': dopasowuje zero lub więcej wystąpień
  18. „+”: dopasowuje jedno lub więcej wystąpień
  19. '?': dopasowuje zero lub jedno wystąpienie
  20. {n}: dokładnie n powtórzeń, n>=0
  21. {n,}: co najmniej n powtórzeń
  22. {,n}: co najwyżej n powtórzeń
  23. {m,n}: co najmniej m powtórzeń i co najwyżej n powtórzeń

Przykłady zrozumienia obejścia

Teraz, gdy znasz już znaki, które składają się na wyrażenie regularne, zobaczmy, jak to działa:

1. Filtrowanie poczty e-mail:

Załóżmy, że chcesz odfiltrować wszystkie identyfikatory e-mail z długiego akapitu. Ogólny format wiadomości e-mail to:

nazwa_użytkownika@nazwa_domeny. <domena_najwyższego poziomu>

Nazwa użytkownika może być alfanumeryczna, dlatego możemy użyć \w do ich oznaczenia, ale istnieje możliwość, że użytkownik założy konto jako imię.nazwisko. Aby temu zaradzić, uciekniemy od kropki i stworzymy zestaw znaków. Następnie nazwa_domeny powinna być tylko alfabetyczna, a zatem A-Za-z będzie to oznaczać. Domena najwyższego poziomu to zwykle .com, .in, .org, ale w zależności od przypadku użycia możesz wybrać cały zakres alfabetyczny lub filtrować określone domeny.

Wyrażenie regularne tego będzie wyglądać tak:

^([a-zA-Z0-9_.]+)@([a-zA-Z0-9-]+)\.([a-zA-Z]{2,4})$

Tutaj również deklarowany jest początek i koniec wzorca, a domena najwyższego poziomu może zawierać tylko 2-4 znaki. Całe wyrażenie ma 3 grupy.

2. Filtrowanie dat:

Wyodrębniane informacje tekstowe mogą zawierać daty i nie jest udostępniana żadna osobna kolumna. Daty są istotnym czynnikiem pomagającym w filtrowaniu danych lub analizie szeregów czasowych. Konkretna data ma format data/miesiąc/rok, gdzie data i miesiąc mogą się zamieniać.

Miesiące mogą być również w formie liczbowej lub alfabetycznej, aw alfabetach jako skróty lub pełne nazwy. Zależy to głównie od tego, ile przypadków jest obecnych w naszych danych i można je osiągnąć tylko poprzez trafienie i próbę.

Poniżej przedstawiono proste wyrażenie regularne obejmujące różne daty:

^(\d{1,2})[/-](\d{1,2})[/-](\d{2,4})$

Ten wzorzec przechwytuje format daty z myślnikiem lub ukośnikiem. Data i miesiąc są ograniczone do jednej lub dwóch cyfr, a rok do 40 cyfr. Odpowiednie jednostki są przechwytywane jako grupy, które w tym przypadku są opcjonalne.

Przeczytaj także: Pomysły i tematy dotyczące projektów w Pythonie

Jak zaimplementować to w Pythonie?

Wyrażenia regularne, które właśnie zbudowaliśmy, spełniają odpowiednie kryteria, które założyliśmy, a teraz nadszedł czas, aby zaimplementować je w kodzie Pythona. Python ma wbudowany moduł o nazwie re module, który implementuje działanie tych wyrażeń. Po prostu,

importuj ponownie

wzorzec = '^(\d{1,2})[/-](\d{1,2})[/-](\d{2,4})$'

Moduł Re oferuje szeroką gamę funkcji i wszystkie mają różne zastosowania. Przyjrzyjmy się niektórym ważnym funkcjom:

  1. re.findall(): Ta funkcja zwraca listę wszystkich dopasowań w ciągu testowym na podstawie przekazanego wzorca. Rozważ ten przykład:

string = '25-12-1999 losowy tekst tutaj 25.12.1999'

print(re.findall(wzór, ciąg))

Zwróci tylko daty z ciągu na liście.

  1. re.sub(): Sub w tej funkcji oznacza podstawienie i robi to samo. Zastępuje dopasowania podaną wartością zastępczą. Funkcja przyjmuje wzorzec, ciąg znaków, wartość zastępczą i opcjonalny parametr licznika. Parametr count kontroluje liczbę wystąpień, które chcesz zastąpić. Domyślnie zastępuje je wszystkie i zwraca nowy ciąg.
  2. re.split(): dzieli ciąg w dopasowanych witrynach i zwraca części jako oddzielne ciągi na liście.
  3. re.search(): Ta funkcja zwraca obiekt dopasowania, który zawiera dopasowanie znalezione w ciągu wraz ze wszystkimi przechwyconymi grupami. Może się przydać, gdy chcesz przechowywać te grupy jako osobne kolumny.

Aby to zrobić:

dopasowanie = ponowne wyszukiwanie (wzór, ciąg)

mecz.grupa(1)

Group(0) zwraca całe dopasowanie, a odpowiadające mu kolejne liczby oznaczają inne grupy.

Zamówienie: Wynagrodzenie programisty Pythona w Indiach

Wniosek

Wyrażenia regularne to potężny sposób na przechwytywanie wzorców w danych tekstowych. Utrzymanie kontroli nad różnymi znakami może wymagać trochę dodatkowego wysiłku, ale upraszcza proces ekstrakcji danych w złożonych przypadkach użycia.

Podaj kilka przykładów wyrażeń regularnych w Pythonie.

Poniższe przykłady ilustrują funkcjonowanie lub wyrażenia regularne w Pythonie:
a. Filtrowanie poczty e-mail
Wyrażenia regularne mogą być efektywnie wykorzystywane do filtrowania wiadomości e-mail. Zwykła składnia filtrowania wiadomości e-mail to - ^((a-zA-Z0-9_.)+)@((a-zA-Z0-9-)+).((a-zA-Z){2,4} )$
To wyrażenie jest podzielone na trzy grupy i dotyczy wielu przypadków, w tym - gdy nazwa użytkownika jest alfanumeryczna i gdy zawiera kropkę, np. „first.last@”. To wyrażenie będzie używane w przypadku domen o najwyższej wartości, które zawierają od 2 do 4 znaków.
b. Filtrowanie dat
Daty mogą być kluczowym czynnikiem podczas filtrowania danych. Dane tekstowe, z którymi masz do czynienia, często zawierają daty. Wyrażenie regularne lub RegEx, które wyodrębnia dane ze zwykłego tekstu, to - ^(d{1,2})(/-)(d{1,2})(/-)(d{2,4})$
Data i miesiąc mogą mieć do 2 cyfr, a miesiąc do 4 cyfr.

Jakie funkcje są zaangażowane w implementację wyrażeń regularnych w Pythonie?

Następujące funkcje są zaangażowane w implementację wyrażeń regularnych w Pythonie:
1. re.findall() — Ta funkcja akceptuje wzorzec, który ma być dopasowany do ciągu tekstowego. Zwraca pasujące ciągi.
2. re.sub() — Sub w „re.sub” oznacza „substytucję”. Ta metoda wykonuje dokładnie tę samą funkcję, co funkcja „re.findall()”.
3. re.split() — oddziela ciągi znaków wokół separatora, który ma być do niego przekazany jako jego parametr. Separatorem może być wszystko.
4. re.search() — ta funkcja zwraca dopasowanie znalezione w ciągu wraz z innymi grupami ciągów, które przechwyciła.

Jakie są specjalne sekwencje używane w wyrażeniach regularnych?

Oto niektóre ze specjalnych sekwencji używanych w wyrażeniach regularnych:
1. A: Sprawdź, czy ciąg zaczyna się od podanego znaku.
2. (Forward Slash) b: Sprawdza, czy ciąg zaczyna się, czy kończy podanym znakiem. (ciąg)/b sprawdza początek, podczas gdy (odwrotny ukośnik) b (ciąg) sprawdza koniec.
3. B: Jest dokładnie przeciwne do b. Sprawdza, czy ciąg nie zaczyna się od podanego znaku.
4. d: Sprawdza wartości liczbowe w ciągu.
5. D: Sprawdza, czy nie ma wartości lub znaków nieliczbowych.
6. s: Sprawdza, czy nie ma znaków odstępu.
7. S: Sprawdza, czy nie ma znaków niebędących odstępami.
8. w: Sprawdza, czy nie ma znaków alfanumerycznych.
9. W: Sprawdza, czy nie ma znaków niealfanumerycznych.