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