Wyrażenia regularne w Pythonie [z przykładami]: jak zaimplementować?
Opublikowany: 2021-01-29Podczas 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
- '.': to symbol wieloznaczny, dopasowuje pojedynczy znak (dowolny znak, ale tylko raz)
- ^: oznacza początek ciągu
- $: oznacza koniec ciągu
- [ ]: dopasowuje jeden z zestawów znaków w [ ]
- [az]: dopasowuje jeden z zakresu znaków a,b,…,z
- [^abc] : dopasowuje znak, który nie jest a,b lub c.
- a|b: dopasowuje a lub b, gdzie a i b to łańcuchy
- () : zapewnia zakres dla operatorów
- \ : włącza escape dla znaków specjalnych (\t, \n, \b, \.)
- \b: pasuje do granicy słowa
- \d : dowolna cyfra, równoważna [0-9]
- \D: dowolna cyfra, równoważna [^0-9]
- \s : dowolna spacja, równoważna [ \t\n\r\f\v]
- \S : dowolna nie-biała spacja, równoważna [^\t\n\r\f\v]
- \w : dowolny alfanumeryczny, odpowiednik [a-zA-Z0-9_]
- \W : dowolny niealfanumeryczny, odpowiednik [^a-zA-Z0-9_]
- '*': dopasowuje zero lub więcej wystąpień
- „+”: dopasowuje jedno lub więcej wystąpień
- '?': dopasowuje zero lub jedno wystąpienie
- {n}: dokładnie n powtórzeń, n>=0
- {n,}: co najmniej n powtórzeń
- {,n}: co najwyżej n powtórzeń
- {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:
- 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.
- 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.
- re.split(): dzieli ciąg w dopasowanych witrynach i zwraca części jako oddzielne ciągi na liście.
- 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.