Python 3 - wyrażenia regularne
Wyrażenie regularne jest specjalnym ciągiem znaków, który pomaga dopasować lub znaleźć inne ciągi lub zestawy strun przy użyciu specjalistycznego składni przechowywanych w strukturze. Wyrażenia regularne są szeroko stosowane w świecie UNIX.
Moduł rezapewnia pełne wsparcie dla wyrażeń regularnych podobnych do Perla w Pythonie. Plikre moduł zgłasza wyjątek re.error jeśli wystąpi błąd podczas kompilowania lub używania wyrażenia regularnego.
Omówilibyśmy dwie ważne funkcje, które byłyby używane do obsługi wyrażeń regularnych. Niemniej jednak najpierw mała rzecz: istnieją różne znaki, które miałyby specjalne znaczenie, gdy są używane w wyrażeniach regularnych. Aby uniknąć nieporozumień podczas korzystania z wyrażeń regularnych, używamy nieprzetworzonych ciągów znaków jakor'expression'.
Podstawowe wzorce pasujące do pojedynczych znaków
Sr.No. | Wyrażenie i dopasowania |
---|---|
1 | a, X, 9, < zwykłe postacie po prostu dokładnie do siebie pasują. |
2 | . (a period) dopasowuje dowolny pojedynczy znak z wyjątkiem nowej linii „\ n” |
3 | \w dopasowuje znak „słowa”: literę, cyfrę lub podkreślenie [a-zA-Z0-9_]. |
4 | \W dopasowuje dowolny znak niebędący słowem. |
5 | \b granica między słowem a nie-słowem |
6 | \s dopasowuje pojedynczy znak spacji - spację, nową linię, powrót, tabulator |
7 | \S dopasowuje dowolny znak niebędący białymi znakami. |
8 | \t, \n, \r tab, nowa linia, powrót |
9 | \d cyfra dziesiętna [0–9] |
10 | ^ dopasowuje początek łańcucha |
11 | $ dopasuj koniec łańcucha |
12 | \ hamują „specjalność” postaci. |
Flagi kompilacji
Flagi kompilacji pozwalają modyfikować niektóre aspekty działania wyrażeń regularnych. Flagi są dostępne w module re pod dwiema nazwami, długą nazwą, taką jakIGNORECASE i krótki jednoliterowy formularz, na przykład I.
Sr.No. | Flaga i znaczenie |
---|---|
1 | ASCII, A Dopasowuje kilka znaków specjalnych, takich jak \ w, \ b, \ s i \ d, tylko do znaków ASCII z odpowiednią właściwością. |
2 | DOTALL, S Twórz, dopasowuj dowolny znak, w tym znaki nowej linii |
3 | IGNORECASE, I Dopasuj bez rozróżniania wielkości liter |
4 | LOCALE, L Wykonaj dopasowanie uwzględniające język |
5 | MULTILINE, M Dopasowywanie wielowierszowe, wpływające na ^ i $ |
6 | VERBOSE, X (for ‘extended’) Włącz szczegółowe RE, które można uporządkować w bardziej przejrzysty i zrozumiały sposób |
Funkcja dopasowania
Ta funkcja próbuje dopasować wzorzec RE do łańcucha z opcjonalnymi flagami .
Oto składnia tej funkcji -
re.match(pattern, string, flags = 0)
Oto opis parametrów -
Sr.No. | Parametr i opis |
---|---|
1 | pattern To jest wyrażenie regularne do dopasowania. |
2 | string To jest ciąg, który byłby przeszukiwany w celu dopasowania do wzorca na początku łańcucha. |
3 | flags Możesz określić różne flagi za pomocą bitowego OR (|). Są to modyfikatory wymienione w poniższej tabeli. |
Funkcja re.match zwraca plikmatch sprzeciw wobec sukcesu, Nonena niepowodzenie. Używamy grupę (Lb) lub grupy () Funkcjąmatch obiekt, aby uzyskać dopasowane wyrażenie.
Sr.No. | Dopasuj metodę i opis obiektu |
---|---|
1 | group(num = 0) Ta metoda zwraca całe dopasowanie (lub określony numer podgrupy) |
2 | groups() Ta metoda zwraca wszystkie pasujące podgrupy w krotce (puste, jeśli nie było żadnych) |
Przykład
#!/usr/bin/python3
import re
line = "Cats are smarter than dogs"
matchObj = re.match( r'(.*) are (.*?) .*', line, re.M|re.I)
if matchObj:
print ("matchObj.group() : ", matchObj.group())
print ("matchObj.group(1) : ", matchObj.group(1))
print ("matchObj.group(2) : ", matchObj.group(2))
else:
print ("No match!!")
Wykonanie powyższego kodu daje następujący wynik -
matchObj.group() : Cats are smarter than dogs
matchObj.group(1) : Cats
matchObj.group(2) : smarter
Funkcja wyszukiwania
Ta funkcja wyszukuje pierwsze wystąpienie wzorca RE w ciągu z opcjonalnymi flagami .
Oto składnia tej funkcji -
re.search(pattern, string, flags = 0)
Oto opis parametrów -
Sr.No. | Parametr i opis |
---|---|
1 | pattern To jest wyrażenie regularne do dopasowania. |
2 | string To jest ciąg, który byłby przeszukiwany, aby dopasować wzorzec w dowolnym miejscu w ciągu. |
3 | flags Możesz określić różne flagi za pomocą bitowego OR (|). Są to modyfikatory wymienione w poniższej tabeli. |
Funkcja re.search zwraca plikmatch sprzeciw wobec sukcesu, nonena niepowodzenie. Używamy grupę (Lb) lub grupy () Funkcjąmatch obiekt, aby uzyskać dopasowane wyrażenie.
Sr.No. | Dopasuj metodę i opis obiektu |
---|---|
1 | group(num = 0) Ta metoda zwraca całe dopasowanie (lub określony numer podgrupy) |
2 | groups() Ta metoda zwraca wszystkie pasujące podgrupy w krotce (puste, jeśli nie było żadnych) |
Przykład
#!/usr/bin/python3
import re
line = "Cats are smarter than dogs";
searchObj = re.search( r'(.*) are (.*?) .*', line, re.M|re.I)
if searchObj:
print ("searchObj.group() : ", searchObj.group())
print ("searchObj.group(1) : ", searchObj.group(1))
print ("searchObj.group(2) : ", searchObj.group(2))
else:
print ("Nothing found!!")
Wykonanie powyższego kodu daje następujący wynik -
matchObj.group() : Cats are smarter than dogs
matchObj.group(1) : Cats
matchObj.group(2) : smarter
Dopasowywanie a wyszukiwanie
Python oferuje dwie różne operacje prymitywne oparte na wyrażeniach regularnych: match sprawdza dopasowanie tylko na początku łańcucha, podczas gdy search sprawdza dopasowanie w dowolnym miejscu łańcucha (domyślnie robi to Perl).
Przykład
#!/usr/bin/python3
import re
line = "Cats are smarter than dogs";
matchObj = re.match( r'dogs', line, re.M|re.I)
if matchObj:
print ("match --> matchObj.group() : ", matchObj.group())
else:
print ("No match!!")
searchObj = re.search( r'dogs', line, re.M|re.I)
if searchObj:
print ("search --> searchObj.group() : ", searchObj.group())
else:
print ("Nothing found!!")
Wykonanie powyższego kodu daje następujący wynik -
No match!!
search --> matchObj.group() : dogs
Wyszukaj i zamień
Jeden z najważniejszych re metody używające wyrażeń regularnych to sub.
Składnia
re.sub(pattern, repl, string, max=0)
Metoda ta zastępuje wszystkie wystąpienia RE wzór w ciąg z repl , zastępując wszystkie wystąpienia chyba max jest świadczona. Ta metoda zwraca zmodyfikowany ciąg.
Przykład
#!/usr/bin/python3
import re
phone = "2004-959-559 # This is Phone Number"
# Delete Python-style comments
num = re.sub(r'#.*$', "", phone)
print ("Phone Num : ", num)
# Remove anything other than digits
num = re.sub(r'\D', "", phone)
print ("Phone Num : ", num)
Wykonanie powyższego kodu daje następujący wynik -
Phone Num : 2004-959-559
Phone Num : 2004959559
Modyfikatory wyrażeń regularnych: flagi opcji
Literały wyrażeń regularnych mogą zawierać opcjonalny modyfikator do kontrolowania różnych aspektów dopasowywania. Modyfikatory są określane jako opcjonalna flaga. Możesz podać wiele modyfikatorów za pomocą wyłącznego OR (|), jak pokazano wcześniej i mogą być reprezentowane przez jeden z nich -
Sr.No. | Modyfikator i opis |
---|---|
1 | re.I Dopasowuje bez rozróżniania wielkości liter. |
2 | re.L Interpretuje słowa zgodnie z aktualnym językiem. Ta interpretacja wpływa na grupę alfabetyczną (\ w i \ W), a także na zachowanie granic słów (\ b i \ B). |
3 | re.M Sprawia, że $ pasuje do końca linii (nie tylko do końca ciągu) i sprawia, że ^ pasuje do początku dowolnego wiersza (nie tylko do początku ciągu). |
4 | re.S Sprawia, że kropka (kropka) pasuje do dowolnego znaku, w tym do nowej linii. |
5 | re.U Interpretuje litery zgodnie z zestawem znaków Unicode. Ta flaga wpływa na zachowanie \ w, \ W, \ b, \ B. |
6 | re.X Zezwala na „ładniejszą” składnię wyrażeń regularnych. Ignoruje białe znaki (z wyjątkiem wewnątrz zbioru [] lub gdy jest poprzedzony odwrotnym ukośnikiem) i traktuje bez znaku # jako znacznik komentarza. |
Wzorce wyrażeń regularnych
Z wyjątkiem znaków sterujących, (+ ? . * ^ $ ( ) [ ] { } | \), wszystkie postacie pasują do siebie. Znaku sterującego można zmienić, poprzedzając go ukośnikiem odwrotnym.
W poniższej tabeli wymieniono składnię wyrażeń regularnych dostępną w Pythonie -
Sr.No. | Parametr i opis |
---|---|
1 | ^ Dopasowuje początek wiersza. |
2 | $ Pasuje do końca linii. |
3 | . Dopasowuje dowolny pojedynczy znak z wyjątkiem nowej linii. Użycie opcji m pozwala dopasować również znak nowej linii. |
4 | [...] Dopasowuje dowolny pojedynczy znak w nawiasach. |
5 | [^...] Dopasowuje dowolny pojedynczy znak nie w nawiasach |
6 | re* Dopasowuje 0 lub więcej wystąpień poprzedniego wyrażenia. |
7 | re+ Dopasowuje 1 lub więcej wystąpień poprzedniego wyrażenia. |
8 | re? Dopasowuje 0 lub 1 wystąpienie poprzedniego wyrażenia. |
9 | re{ n} Dopasowuje dokładnie n liczbę wystąpień poprzedniego wyrażenia. |
10 | re{ n,} Dopasowuje n lub więcej wystąpień poprzedniego wyrażenia. |
11 | re{ n, m} Dopasowuje co najmniej n i co najwyżej m wystąpień poprzedniego wyrażenia. |
12 | a|b Pasuje do a lub b. |
13 | (re) Grupuje wyrażenia regularne i zapamiętuje dopasowany tekst. |
14 | (?imx) Tymczasowo włącza opcje i, m lub x w wyrażeniu regularnym. Jeśli podano w nawiasach, dotyczy to tylko tego obszaru. |
15 | (?-imx) Tymczasowo wyłącza opcje i, m lub x w wyrażeniu regularnym. Jeśli podano w nawiasach, dotyczy to tylko tego obszaru. |
16 | (?: re) Grupuje wyrażenia regularne bez zapamiętywania dopasowanego tekstu. |
17 | (?imx: re) Tymczasowo włącza opcje i, m lub x w nawiasach. |
18 | (?-imx: re) Tymczasowo wyłącza opcje i, m lub x w nawiasach. |
19 | (?#...) Komentarz. |
20 | (?= re) Określa położenie za pomocą wzoru. Nie ma zakresu. |
21 | (?! re) Określa położenie za pomocą negacji wzoru. Nie ma zakresu. |
22 | (?> re) Dopasowuje niezależny wzorzec bez cofania. |
23 | \w Dopasowuje znaki słowne. |
24 | \W Dopasowuje znaki inne niż słowa. |
25 | \s Dopasowuje spacje. Odpowiednik [\ t \ n \ r \ f]. |
26 | \S Dopasowuje bez białych znaków. |
27 | \d Dopasowuje cyfry. Odpowiednik [0-9]. |
28 | \D Dopasowuje niecyfry. |
29 | \A Dopasowuje początek łańcucha. |
30 | \Z Dopasowuje koniec łańcucha. Jeśli istnieje nowa linia, pasuje ona tuż przed nową linią. |
31 | \z Dopasowuje koniec łańcucha. |
32 | \G Mecze to miejsce, w którym zakończył się ostatni mecz. |
33 | \b Dopasowuje granice wyrazów poza nawiasami. Dopasowuje znak Backspace (0x08) wewnątrz nawiasów. |
34 | \B Pasuje do granic innych niż słowa. |
35 | \n, \t, etc. Dopasowuje znaki nowej linii, powroty karetki, tabulatory itp. |
36 | \1...\9 Pasuje do n-tego zgrupowanego wyrażenia podrzędnego. |
37 | \10 Pasuje do n-tego zgrupowanego wyrażenia podrzędnego, jeśli zostało już dopasowane. W przeciwnym razie odnosi się do ósemkowej reprezentacji kodu znaku. |
Przykłady wyrażeń regularnych
Dosłowne znaki
Sr.No. | Przykład i opis |
---|---|
1 | python Dopasuj „python”. |
Klasy postaci
Sr.No. | Przykład i opis |
---|---|
1 | [Pp]ython Dopasuj „Python” lub „python” |
2 | rub[ye] Dopasuj „ruby” lub „rube” |
3 | [aeiou] Dopasuj dowolną małą samogłoskę |
4 | [0-9] Dopasuj dowolną cyfrę; tak samo jak [0123456789] |
5 | [a-z] Dopasuj dowolną małą literę ASCII |
6 | [A-Z] Dopasuj dowolną wielką literę ASCII |
7 | [a-zA-Z0-9] Dopasuj dowolne z powyższych |
8 | [^aeiou] Dopasuj wszystko inne niż mała samogłoska |
9 | [^0-9] Dopasuj cokolwiek innego niż cyfra |
Specjalne klasy postaci
Sr.No. | Przykład i opis |
---|---|
1 | . Dopasuj dowolny znak z wyjątkiem nowej linii |
2 | \d Dopasuj cyfrę: [0–9] |
3 | \D Dopasuj niecyfrę: [^ 0-9] |
4 | \s Dopasuj biały znak: [\ t \ r \ n \ f] |
5 | \S Dopasuj bez białych znaków: [^ \ t \ r \ n \ f] |
6 | \w Dopasuj pojedynczy znak słowa: [A-Za-z0-9_] |
7 | \W Dopasuj znak niebędący słowem: [^ A-Za-z0-9_] |
Przypadki powtórzeń
Sr.No. | Przykład i opis |
---|---|
1 | ruby? Dopasuj „rub” lub „ruby”: y jest opcjonalne |
2 | ruby* Dopasuj „rub” plus 0 lub więcej ys |
3 | ruby+ Dopasuj „rub” plus 1 lub więcej lat |
4 | \d{3} Dopasuj dokładnie 3 cyfry |
5 | \d{3,} Dopasuj 3 lub więcej cyfr |
6 | \d{3,5} Dopasuj 3, 4 lub 5 cyfr |
Nongreedy powtórzenie
To pasuje do najmniejszej liczby powtórzeń -
Sr.No. | Przykład i opis |
---|---|
1 | <.*> Chciwe powtórzenie: dopasowuje „<python> perl>” |
2 | <.*?> Nongreedy: dopasowuje „<python>” do „<python> perl>” |
Grupowanie z nawiasami
Sr.No. | Przykład i opis |
---|---|
1 | \D\d+ Brak grupy: + powtarza \ d |
2 | (\D\d)+ Zgrupowane: + powtórzenia \ D \ d para |
3 | ([Pp]ython(,)?)+ Dopasuj „Python”, „Python, python, python” itp. |
Backreferences
To ponownie pasuje do poprzednio dopasowanej grupy -
Sr.No. | Przykład i opis |
---|---|
1 | ([Pp])ython&\1ails Dopasuj python & pails lub Python & Pails |
2 | (['"])[^\1]*\1 Ciąg w pojedynczym lub podwójnym cudzysłowie. \ 1 pasuje do dopasowanej pierwszej grupy. \ 2 pasuje do dopasowanej 2. grupy itp. |
Alternatywy
Sr.No. | Przykład i opis |
---|---|
1 | python|perl Dopasuj „python” lub „perl” |
2 | rub(y|le) Dopasuj „rubin” lub „rubel” |
3 | Python(!+|\?) „Python”, po którym następuje jeden lub więcej! czy jeden? |
Kotwice
To musi określić pozycję dopasowania.
Sr.No. | Przykład i opis |
---|---|
1 | ^Python Dopasuj „Python” na początku łańcucha lub linii wewnętrznej |
2 | Python$ Dopasuj „Python” na końcu ciągu lub linii |
3 | \APython Dopasuj „Python” na początku łańcucha |
4 | Python\Z Dopasuj „Python” na końcu łańcucha |
5 | \bPython\b Dopasuj „Python” na granicy słowa |
6 | \brub\B \ B nie jest granicą słów: dopasuj „rub” w „rube” i „ruby”, ale nie samodzielnie |
7 | Python(?=!) Dopasuj „Python”, jeśli następuje po nim wykrzyknik. |
8 | Python(?!!) Dopasuj „Python”, jeśli nie następuje po nim wykrzyknik. |
Specjalna składnia z nawiasami
Sr.No. | Przykład i opis |
---|---|
1 | R(?#comment) Pasuje do „R”. Cała reszta to komentarz |
2 | R(?i)uby Podczas dopasowywania „uby” bez rozróżniania wielkości liter |
3 | R(?i:uby) Tak samo jak powyżej |
4 | rub(?:y|le)) Grupuj tylko bez tworzenia \ 1 odwołania wstecznego |