Python RegEx: re.match(), re.search(), re.findall() z przykładem
Co to jest wyrażenie regularne w Python?
A Wyrażenie regularne (RE) w języku programowania to specjalny ciąg tekstowy używany do opisu wzorca wyszukiwania. Jest niezwykle przydatny do wydobywania informacji z tekstu, takich jak kod, pliki, dzienniki, arkusze kalkulacyjne, a nawet dokumenty.
Podczas korzystania z Python wyrażenie regularne Pierwszą rzeczą jest rozpoznanie, że wszystko jest zasadniczo znakiem i piszemy wzorce pasujące do określonej sekwencji znaków, zwanej także ciągiem znaków. Litery ASCII lub łacińskie to te, które znajdują się na klawiaturze, a do dopasowania obcego tekstu używany jest kod Unicode. Zawiera cyfry i znaki interpunkcyjne oraz wszystkie znaki specjalne, takie jak $#@!% itp.
Na przykład Python wyrażenie regularne może nakazać programowi wyszukanie określonego tekstu w ciągu znaków, a następnie wydrukowanie odpowiedniego wyniku. Wyrażenie może zawierać
- Dopasowanie tekstu
- Powtórzenie
- Rozgałęzienie
- Kompozycja wzoru itp.
Wyrażenie regularne lub RegEx w Python jest oznaczane jako RE (RE, wyrażenia regularne lub wzór wyrażenia regularnego) są importowane przez moduł ponownie. Python obsługuje wyrażenia regularne za pośrednictwem bibliotek. RegEx w Python obsługuje różne rzeczy, takie jak Modyfikatory, identyfikatory i białe znaki.
Identyfikatory | modyfikatory | Białe znaki | Wymagana ucieczka |
---|---|---|---|
\d= dowolna liczba (cyfra) | \d reprezentuje cyfrę. Przykład: \d{1,5} zadeklaruje cyfrę z zakresu 1,5, np. 424,444,545 XNUMX XNUMX itd. | \n = nowa linia | . + *? [] $ ^ () {} | \ |
\D= wszystko inne niż liczba (nie cyfra) | + = pasuje do 1 lub więcej | \s= spacja | |
\s = spacja (tabulacja, spacja, nowa linia itp.) |
? = odpowiada 0 lub 1 | \t =zakładka | |
\S= wszystko oprócz spacji | * = 0 lub więcej | \e = ucieczka | |
\w = litery ( Dopasowuje znak alfanumeryczny, w tym „_”) | $ dopasowuje koniec łańcucha | \r = powrót karetki | |
\W = wszystko oprócz liter (dopasowuje znak inny niż alfanumeryczny z wyjątkiem „_”) | ^ dopasowuje początek łańcucha | \f= wysuw formularza | |
. = wszystko oprócz liter (kropek) | | pasuje do jednego lub x/y | ------ | |
\b = dowolny znak z wyjątkiem nowej linii | [] = zakres lub „wariancja” | ------ | |
\. | {x} = ta ilość poprzedzającego kodu | ------ |
Składnia wyrażeń regularnych (RE).
import re
- Moduł „re” dołączony do Python używany głównie do wyszukiwania i manipulowania ciągami znaków
- Często używany również w przypadku strony internetowej „Skrobanie” (wyodrębnij dużą ilość danych ze stron internetowych)
Samouczek wyrażeń rozpoczniemy od tego prostego ćwiczenia, używając wyrażeń (w+) i (^).
Przykład wyrażenia w+ i ^
- „^”: To wyrażenie dopasowuje początek ciągu
- „w+„: To wyrażenie dopasowuje znak alfanumeryczny w ciągu
Tutaj zobaczymy A Python RegEx Przykład użycia wyrażeń w+ i ^ w naszym kodzie. Omówimy funkcję re.findall() w Python, później w tym samouczku, ale przez chwilę skupimy się po prostu na wyrażeniach \w+ i \^.
Na przykład dla naszego ciągu „guru99, edukacja to zabawa”, jeśli wykonamy kod za pomocą w+ i^, otrzymamy wynik „guru99”.
import re xx = "guru99,education is fun" r1 = re.findall(r"^\w+",xx) print(r1)
Pamiętaj, jeśli usuniesz znak + z w+, wynik się zmieni i wyświetli tylko pierwszy znak pierwszej litery, tj. [g]
Przykład wyrażenia \s w funkcji re.split
- „s”: To wyrażenie służy do tworzenia spacji w ciągu
Aby zrozumieć, jak to RegEx w Python działa, zaczynamy od prostego Python RegEx Przykład funkcji podziału. W przykładzie rozdzieliliśmy każde słowo za pomocą funkcji „re.split” i jednocześnie użyliśmy wyrażenia \s, które pozwala osobno analizować każde słowo w ciągu.
Kiedy wykonasz ten kod, otrzymasz wynik [„my”, „jesteśmy”, „dzielenie”, „the”, „słowa”].
Zobaczmy teraz, co się stanie, jeśli usuniesz „\” z s. Na wyjściu nie ma alfabetu „”, dzieje się tak, ponieważ usunęliśmy „\” z łańcucha, a „s” jest traktowane jako zwykły znak i w ten sposób dzieli słowa tam, gdzie znajdzie „s” w ciągu.
Podobnie istnieje szereg innych Python wyrażenie regularne, którego można używać na różne sposoby w Python jak \d,\D,$,\.,\b itd.
Oto pełny kod
import re xx = "guru99,education is fun" r1 = re.findall(r"^\w+", xx) print((re.split(r'\s','we are splitting the words'))) print((re.split(r's','split the words')))
Następnie zobaczymy typy metod używanych z wyrażeniami regularnymi Python.
Używanie metod wyrażeń regularnych
Pakiet „re” udostępnia kilka metod rzeczywistego wykonywania zapytań na ciągu wejściowym. Zobaczymy metody ponownego wprowadzenia Python:
- rewanż()
- badania()
- ponownie.znajdź()
Note: Na podstawie wyrażeń regularnych, Python oferuje dwie różne operacje pierwotne. Metoda match sprawdza zgodność tylko na początku ciągu, podczas gdy search sprawdza zgodność w dowolnym miejscu ciągu.
rewanż()
rewanż() funkcja ponownego wejścia Python przeszuka wzorzec wyrażenia regularnego i zwróci pierwsze wystąpienie. The Python Metoda RegEx Match sprawdza dopasowanie tylko na początku ciągu. Jeśli zatem w pierwszej linii zostanie znalezione dopasowanie, zwracany jest obiekt dopasowania. Jeśli jednak dopasowanie zostanie znalezione w innej linii, plik Python Funkcja RegEx Match zwraca wartość null.
Na przykład rozważmy następujący kod Python funkcja re.match(). Wyrażenia „w+” i „\W” będą pasować do słów rozpoczynających się na literę „g”, a następnie wszystko, co nie zaczyna się na „g”, nie jest identyfikowane. Aby sprawdzić dopasowanie każdego elementu na liście lub ciągu znaków, uruchamiamy w tym przypadku pętlę forloop Python re.match() Przykład.
re.search(): Znajdowanie wzorca w tekście
badania() funkcja przeszuka wzorzec wyrażenia regularnego i zwróci pierwsze wystąpienie. Inaczej Python re.match(), sprawdzi wszystkie linie ciągu wejściowego. The Python Funkcja re.search() zwraca obiekt dopasowania, gdy zostanie znaleziony wzorzec, i wartość „null”, jeśli wzorzec nie zostanie znaleziony
Jak korzystać z wyszukiwania ()?
Aby skorzystać z funkcji search(), należy zaimportować Python re moduł, a następnie wykonaj kod. The Python Funkcja re.search() pobiera „wzorzec” i „tekst” do skanowania z naszego głównego ciągu znaków
Na przykład tutaj szukamy dwóch dosłownych ciągów „Testowanie oprogramowania” „guru99” w ciągu tekstowym „Oprogramowanie Testowanie jest zabawne”. W przypadku „testowania oprogramowania” znaleźliśmy dopasowanie, dlatego zwraca wynik Python re.search() Przykład „znaleziono dopasowanie”, podczas gdy dla słowa „guru99” nie znaleźliśmy w ciągu znaków, dlatego zwraca wynik jako „Brak dopasowania”.
ponownie.znajdź()
Znajdź wszystko() Moduł służy do wyszukiwania „wszystkich” wystąpień pasujących do danego wzorca. Natomiast moduł search() zwróci tylko pierwsze wystąpienie pasujące do określonego wzorca. findall() wykona iterację po wszystkich wierszach pliku i zwróci w jednym kroku wszystkie nienakładające się dopasowania wzorca.
Jak używać funkcji re.findall() w Python?
Tutaj mamy listę adresów e-mail i chcemy, aby wszystkie adresy e-mail zostały pobrane z listy, używamy metody re.findall() w Python. Znajdą się tam wszystkie adresy e-mail z listy.
Oto pełny kod przykładu re.findall()
import re list = ["guru99 get", "guru99 give", "guru Selenium"] for element in list: z = re.match("(g\w+)\W(g\w+)", element) if z: print((z.groups())) patterns = ['software testing', 'guru99'] text = 'software testing is fun?' for pattern in patterns: print('Looking for "%s" in "%s" ->' % (pattern, text), end=' ') if re.search(pattern, text): print('found a match!') else: print('no match') abc = 'guru99@google.com, careerguru99@hotmail.com, users@yahoomail.com' emails = re.findall(r'[\w\.-]+@[\w\.-]+', abc) for email in emails: print(email)
Python Flagi
Wiele Python Metody Regex i funkcje Regex przyjmują opcjonalny argument zwany Flagami. Flagi te mogą modyfikować znaczenie danego Python Wzór regeksu. Aby to zrozumieć, zobaczymy jeden lub dwa przykłady tych flag.
Różne flagi używane w Python obejmuje
Składnia flag Regex | Co robi ta flaga |
---|---|
[re.M] | Spraw, aby początek/koniec uwzględniał każdą linię |
[re.I] | Ignoruje wielkość liter |
[re.S] | Robić [ . ] |
[re.U] | Spraw, aby { \w,\W,\b,\B} było zgodne z regułami Unicode |
[re.L] | Spraw, aby {\w,\W,\b,\B} podążało za ustawieniami regionalnymi |
[dot.X] | Zezwalaj na komentarze w Regex |
Przykład flagi re.M lub Multiline
W przypadku multiline znak wzorca [^] pasuje do pierwszego znaku ciągu i początku każdego wiersza (następującego bezpośrednio po każdym nowym wierszu). Podczas gdy wyrażenie małe „w” jest używane do oznaczenia spacji znakami. Po uruchomieniu kodu pierwsza zmienna „k1” drukuje tylko znak „g” dla słowa guru99, podczas gdy po dodaniu flagi multiline pobiera pierwsze znaki wszystkich elementów w ciągu.
Oto kod
import re xx = """guru99 careerguru99 selenium""" k1 = re.findall(r"^\w", xx) k2 = re.findall(r"^\w", xx, re.MULTILINE) print(k1) print(k2)
- Zadeklarowaliśmy zmienną xx dla ciągu „guru99…. careerguru99….selenium”
- Uruchom kod bez użycia flag multiline, daje to wynik tylko „g” z linii
- Uruchom kod z flagą „multiline”, po wydrukowaniu „k2” otrzymasz wynik jako „g”, „c” i „s”
- Tak więc różnicę możemy zobaczyć po i przed dodaniem wielu linii w powyższym przykładzie.
Podobnie możesz użyć innych Python flagi takie jak re.U (Unicode), re.L (Śledź ustawienia regionalne), re.X (Zezwalaj na komentarz) itp.
Python 2 Przykład
Powyższe kody są Python 3 przykłady, jeśli chcesz wbiec Python 2 proszę rozważyć poniższy kod.
# Example of w+ and ^ Expression import re xx = "guru99,education is fun" r1 = re.findall(r"^\w+",xx) print r1 # Example of \s expression in re.split function import re xx = "guru99,education is fun" r1 = re.findall(r"^\w+", xx) print (re.split(r'\s','we are splitting the words')) print (re.split(r's','split the words')) # Using re.findall for text import re list = ["guru99 get", "guru99 give", "guru Selenium"] for element in list: z = re.match("(g\w+)\W(g\w+)", element) if z: print(z.groups()) patterns = ['software testing', 'guru99'] text = 'software testing is fun?' for pattern in patterns: print 'Looking for "%s" in "%s" ->' % (pattern, text), if re.search(pattern, text): print 'found a match!' else: print 'no match' abc = 'guru99@google.com, careerguru99@hotmail.com, users@yahoomail.com' emails = re.findall(r'[\w\.-]+@[\w\.-]+', abc) for email in emails: print email # Example of re.M or Multiline Flags import re xx = """guru99 careerguru99 selenium""" k1 = re.findall(r"^\w", xx) k2 = re.findall(r"^\w", xx, re.MULTILINE) print k1 print k2
Przetestuj swój Python Wiedza
1. Która metoda jest używana do znalezienia wszystkich wystąpień wzorca w ciągu znaków?
- badania()
- rewanż()
- ponownie.znajdź()
- ponownie podziel()
2. Co reprezentuje klasa znaków \d w wyrażeniach regularnych?
- Dowolna cyfra (0-9)
- Dowolny znak niebędący cyfrą
- Dowolny znak odstępu
- Jakakolwiek litera lub cyfra
3. Jakiej funkcji użyłbyś do podzielenia ciągu znaków na podstawie spacji?
- re.split(r'\s', ciąg)
- re.findall(r'\w+', ciąg)
- re.match(r'\s+', ciąg)
- re.split(r'\w+', ciąg)
4. Jaka jest główna różnica między re.match() i re.search()?
- re.match() szuka wzorca na początku ciągu, podczas gdy re.search() szuka wzorca w dowolnym miejscu ciągu.
- re.match() zwraca wszystkie dopasowania, podczas gdy re.search() zwraca pierwsze dopasowanie.
- re.search() jest szybsze niż re.match().
- Obie funkcje zachowują się w ten sam sposób.
Podsumowanie
Wyrażenie regularne w a język programowania to specjalny ciąg tekstowy używany do opisu wzorca wyszukiwania. Zawiera cyfry i znaki interpunkcyjne oraz wszystkie znaki specjalne, takie jak $#@!% itp. Wyrażenie może zawierać dosłowność
- Dopasowanie tekstu
- Powtórzenie
- Rozgałęzienie
- Kompozycja wzoru itp.
In Python, wyrażenie regularne jest oznaczane jako RE (RE, wyrażenia regularne lub wzór wyrażenia regularnego) są osadzone w Python moduł ponownie.
- Moduł „re” dołączony do Python używany głównie do wyszukiwania i manipulowania ciągami znaków
- Często używany również w przypadku stron internetowych „Scraping” (wyodrębnianie dużej ilości danych ze stron internetowych)
- Metody wyrażeń regularnych obejmują re.match(),re.search()& re.findall()
- Inne Python Metody zamiany RegEx to sub() i subn(), które służą do zastępowania pasujących ciągów w re
- Python Flagi Wiele Python Metody Regex i funkcje Regex przyjmują opcjonalny argument zwany Flagami
- Te flagi mogą modyfikować znaczenie danego wzorca Regex
- Różne Python flagi używane w metodach Regex to re.M, re.I, re.S itp.