A Wyrażenie regularne lub RegEx to specjalna sekwencja znaków, która wykorzystuje wzorzec wyszukiwania do znalezienia ciągu lub zestawu ciągów.
Może wykryć obecność lub brak tekstu, dopasowując go do określonego wzorca, a także może podzielić wzorzec na jeden lub więcej wzorców podrzędnych.
Moduł Regex w Pythonie
Python ma wbudowany moduł o nazwie Odnośnie który jest używany w wyrażeniach regularnych w Pythonie. Możemy zaimportować ten moduł za pomocą instrukcji import .
Przykład: Importowanie modułu re w Pythonie
Python3
# importing re module> import> re> |
>
>
Jak korzystać z RegEx w Pythonie?
Możesz użyć RegEx w Pythonie po zaimportowaniu modułu re.
Przykład:
Ten kod Pythona używa wyrażeń regularnych do wyszukiwania słowa portal w danym ciągu, a następnie wypisuje indeksy początkowe i końcowe dopasowanego słowa w ciągu.
Python3
import> re> > s>=> 'techcodeview.com: A computer science portal for geeks'> > match>=> re.search(r>'portal'>, s)> > print>(>'Start Index:'>, match.start())> print>(>'End Index:'>, match.end())> |
>
>Wyjście
Start Index: 34 End Index: 40>
Notatka: Tutaj znak r (r’portal’) oznacza surowe, a nie wyrażenie regularne. Surowy ciąg znaków różni się nieco od zwykłego ciągu znaków i nie będzie interpretował znaku jako znaku ucieczki. Dzieje się tak, ponieważ aparat wyrażeń regularnych używa znaku do własnych celów ucieczki.
Zanim zaczniemy od modułu wyrażeń regularnych w Pythonie, zobaczmy, jak właściwie napisać wyrażenie regularne przy użyciu metaznaków lub sekwencji specjalnych.
Metaznaki
Metaznaki to znaki o specjalnym znaczeniu.
Aby zrozumieć analogię RE, metaznaki są przydatne i ważne. Zostaną one wykorzystane w funkcjach modułu re. Poniżej znajduje się lista metaznaków.
| MetaCharaktery | Opis |
|---|---|
| Używane do pomijania specjalnego znaczenia następującego po nim znaku rozmiar wektora C++ | |
| [] | Reprezentuje klasę postaci |
| ^ | Pasuje do początku |
| $ | Pasuje do końca |
| . | Dopasowuje dowolny znak z wyjątkiem nowej linii |
| | | Oznacza LUB (pasuje do dowolnego znaku oddzielonego nim. |
| ? | Dopasowuje zero lub jedno wystąpienie |
| * | Dowolna liczba wystąpień (w tym 0 wystąpień) |
| + | Jedno lub więcej wystąpień |
| {} | Wskaż liczbę wystąpień poprzedzającego wyrażenia regularnego do dopasowania. |
| () | Dołącz grupę Regex |
Omówmy szczegółowo każdy z tych metaznaków:
1. – Ukośnik odwrotny
Ukośnik odwrotny () gwarantuje, że znak nie będzie traktowany w specjalny sposób. Można to uznać za sposób na uniknięcie metaznaków.
Na przykład, jeśli chcesz wyszukać kropkę (.) w ciągu, przekonasz się, że kropka (.) będzie traktowana jako znak specjalny, podobnie jak jeden z metaznaków (jak pokazano w powyższej tabeli). Zatem w tym przypadku użyjemy ukośnika odwrotnego () tuż przed kropką (.), aby straciła ona swoją specjalność. Aby lepiej zrozumieć, zobacz poniższy przykład.
Przykład:
Pierwsze wyszukiwanie ( re.search(r'.', s)> ) dopasowuje dowolny znak, a nie tylko kropkę, podczas drugiego wyszukiwania ( re.search(r'.', s)> ) specjalnie wyszukuje i dopasowuje znak kropki.
Python3
import> re> > s>=> 'geeks.forgeeks'> > # without using> match>=> re.search(r>'.'>, s)> print>(match)> > # using> match>=> re.search(r>'.'>, s)> print>(match)> |
>
>Wyjście
>
2. [] – Nawiasy kwadratowe
Nawiasy kwadratowe ([]) reprezentują klasę znaków składającą się z zestawu znaków, które chcemy dopasować. Na przykład klasa znaku [abc] będzie pasować do dowolnego pojedynczego znaku a, b lub c.
Zakres znaków możemy określić także za pomocą – wewnątrz nawiasów kwadratowych. Na przykład,
- [0, 3] to próbka jako [0123]
- [a-c] jest takie samo jak [abc]
Możemy również odwrócić klasę znaku za pomocą symbolu daszka (^). Na przykład,
- [^0-3] oznacza dowolną liczbę z wyjątkiem 0, 1, 2 i 3
- [^a-c] oznacza dowolny znak z wyjątkiem a, b lub c
Przykład:
W tym kodzie używasz wyrażeń regularnych, aby znaleźć wszystkie znaki w ciągu znaków mieszczące się w zakresie od „a” do „m”. The re.findall()> funkcja zwraca listę wszystkich takich znaków. W podanym ciągu znaki pasujące do tego wzorca to: 'c', 'k', 'b', 'f', 'j', 'e', 'h', 'l', 'd', ' G'.
Python3
import> re> > string>=> 'The quick brown fox jumps over the lazy dog'> pattern>=> '[a-m]'> result>=> re.findall(pattern, string)> > print>(result)> |
>
>Wyjście
['h', 'e', 'i', 'c', 'k', 'b', 'f', 'j', 'm', 'e', 'h', 'e', 'l', 'a', 'd', 'g']>
3. ^ – Karet
Symbol karetki (^) dopasowuje początek ciągu, czyli sprawdza, czy ciąg zaczyna się od podanych znaków, czy nie. Na przykład -
- ^g sprawdzi, czy ciąg zaczyna się od g, np. maniacy, globus, dziewczyna, g itp.
- ^ge sprawdzi, czy ciąg zaczyna się od ge, np. geeks, geeksforgeeks itp.
Przykład:
Ten kod używa wyrażeń regularnych do sprawdzania, czy lista ciągów zaczyna się od The . Jeśli ciąg zaczyna się od Jest oznaczony jako Dopasowany w przeciwnym razie jest oznaczony jako Nie pasuje.
Python3
import> re> regex>=> r>'^The'> strings>=> [>'The quick brown fox'>,>'The lazy dog'>,>'A quick brown fox'>]> for> string>in> strings:> >if> re.match(regex, string):> >print>(f>'Matched: {string}'>)> >else>:> >print>(f>'Not matched: {string}'>)> |
>
>Wyjście
Matched: The quick brown fox Matched: The lazy dog Not matched: A quick brown fox>
4. $ – dolar
Symbol dolara($) dopasowuje koniec łańcucha, tzn. sprawdza, czy ciąg kończy się podanymi znakami, czy nie. Na przykład-
- s$ sprawdzi ciąg kończący się na przykład maniacy, końce, s itp.
- ks$ sprawdzi ciąg kończący się na ks, np. geeks, geeksforgeeks, ks itp.
Przykład:
W tym kodzie zastosowano wyrażenie regularne, aby sprawdzić, czy ciąg znaków kończy się na Świat!. Jeśli zostanie znalezione dopasowanie, zostanie wydrukowane Znaleziono dopasowanie! w przeciwnym razie drukuje Nie znaleziono dopasowania .
Python3
import> re> > string>=> 'Hello World!'> pattern>=> r>'World!$'> > match>=> re.search(pattern, string)> if> match:> >print>(>'Match found!'>)> else>:> >print>(>'Match not found.'>)> |
>
>Wyjście
Match found!>
5. . – Kropka
Symbol kropki(.) pasuje tylko do jednego znaku z wyjątkiem znaku nowej linii ( ). Na przykład -
- a.b sprawdzi ciąg zawierający dowolny znak w miejscu kropki, taki jak acb, acbd, abbb itp.
- .. sprawdzi, czy ciąg zawiera co najmniej 2 znaki
Przykład:
W tym kodzie do wyszukiwania wzorca używane jest wyrażenie regularne brązowy.lis w obrębie ciągu. Kropka (.>) we wzorcu reprezentuje dowolny znak. Jeśli zostanie znalezione dopasowanie, zostanie wydrukowane Znaleziono dopasowanie! w przeciwnym razie drukuje Nie znaleziono dopasowania .
Python3
import> re> > string>=> 'The quick brown fox jumps over the lazy dog.'> pattern>=> r>'brown.fox'> > match>=> re.search(pattern, string)> if> match:> >print>(>'Match found!'>)> else>:> >print>(>'Match not found.'>)> |
>
>Wyjście
Match found!>
6. | - Lub
Lub symbol działa jako operator or, co oznacza, że sprawdza, czy wzorzec przed lub po symbolu or jest obecny w ciągu znaków, czy nie. Na przykład -
- a|b dopasuje dowolny ciąg zawierający a lub b, taki jak acd, bcd, abcd itp.
7.? - Znak zapytania
Znak zapytania (?) to kwantyfikator w wyrażeniach regularnych, który wskazuje, że poprzedzający element powinien zostać dopasowany zero lub jeden raz. Pozwala określić, że element jest opcjonalny, co oznacza, że może wystąpić raz lub wcale. Na przykład,
- ab?c zostanie dopasowane do ciągu ac, acb, dabc, ale nie zostanie dopasowane do abbc, ponieważ istnieją dwa b. Podobnie nie zostanie dopasowany do abdc, ponieważ po b nie następuje c.
8.* – Gwiazda
Symbol gwiazdki (*) odpowiada zero lub więcej wystąpień wyrażenia regularnego poprzedzającego symbol *. Na przykład -
- ab*c zostanie dopasowane dla ciągu ac, abc, abbbc, dabc itd., ale nie zostanie dopasowane dla abdc, ponieważ po b nie następuje c.
9. + – Plus
Symbol plus (+) odpowiada co najmniej jednemu wystąpieniu wyrażenia regularnego poprzedzającego symbol +. Na przykład -
- ab+c zostanie dopasowane do ciągu abc, abbc, dabc, ale nie zostanie dopasowane do ac, abdc, ponieważ nie ma b w ac i b, po którym nie następuje c w abdc.
10. {m, n} – Nawiasy klamrowe
Nawiasy klamrowe dopasowują dowolne powtórzenia poprzedzające wyrażenie regularne od m do n włącznie. Na przykład -
- a{2, 4} zostanie dopasowane dla ciągu aaab, baaaac, gaad, ale nie zostanie dopasowane dla ciągów takich jak abc, bc, ponieważ w obu przypadkach istnieje tylko jedno a lub nie ma a.
11. () – Grupa
Symbol grupy służy do grupowania wzorców podrzędnych. Na przykład -
- (a|b)cd będzie pasować do ciągów takich jak acd, abcd, gacd itp.
Sekwencje specjalne
Sekwencje specjalne nie odpowiadają rzeczywistemu znakowi w ciągu, zamiast tego wskazują konkretną lokalizację w wyszukiwanym ciągu, w której musi nastąpić dopasowanie. Ułatwia to pisanie powszechnie używanych wzorców.
Lista sekwencji specjalnych
| Sekwencja specjalna | Opis | Przykłady | |
|---|---|---|---|
| A | Dopasowuje, jeśli ciąg zaczyna się od podanego znaku | Afora | dla maniaków |
| dla świata | |||
| B | Dopasowuje, jeśli słowo zaczyna się lub kończy podanym znakiem. (string) sprawdzi początek słowa, a (string) sprawdzi koniec słowa. | ge | maniacy |
| Dostawać | |||
| B | Jest to przeciwieństwo , tj. ciąg nie powinien zaczynać się ani kończyć podanym wyrażeniem regularnym. | Bge | razem |
| kuźnia | |||
| D | Dopasowuje dowolną cyfrę dziesiętną, jest to odpowiednik ustawionej klasy [0-9] | D | 123 |
| ojej 1 | |||
| D importuj skaner Java | Dopasowuje dowolny znak inny niż cyfra, jest to równoważne ustawionej klasie [^0-9] | D | maniacy |
| maniak 1 | |||
| S | Dopasowuje dowolny biały znak. | S | oj ks |
| a bc a | |||
| S | Dopasowuje dowolny znak inny niż białe znaki | S | łóżko |
| abcd | |||
| w | Dopasowuje dowolny znak alfanumeryczny, jest to odpowiednik klasy [a-zA-Z0-9_]. | w | 123 |
| kurczeKs4 | |||
| W | Dopasowuje dowolny znak inny niż alfanumeryczny. | W | >$ |
| dawać | |||
| Dopasowuje, jeśli ciąg kończy się podanym wyrażeniem regularnym | ab | abcdab | |
| bababab |
Funkcje wyrażeń regularnych
Odnośnie moduł zawiera wiele Funkcje które pomagają nam szukać dopasowania w ciągu.
Przyjrzyjmy się różnym funkcjom udostępnianym przez ten moduł do pracy z wyrażeniami regularnymi w Pythonie.
| Funkcjonować | Opis |
|---|---|
| ponownie.znajdź() | wyszukuje i zwraca wszystkie pasujące wystąpienia na liście |
| ponownie.kompiluj() | Wyrażenia regularne są kompilowane w obiekty wzorców |
| ponownie.split() | Podziel ciąg według wystąpień znaku lub wzorca. |
| re.sub() | Zastępuje wszystkie wystąpienia znaku lub wzorca ciągiem zastępczym. |
| ponowna ucieczka() | Ucieka przed znakiem specjalnym |
| badania() | Wyszukuje pierwsze wystąpienie znaku lub wzorca |
Zobaczmy działanie tych funkcji RegEx z definicją i przykładami:
1. ponownie znajdź()
Zwróć wszystkie nienakładające się dopasowania wzorca w ciągu znaków jako listę ciągów. Ciąg jest skanowany od lewej do prawej, a dopasowania są zwracane w znalezionej kolejności.
Znajdowanie wszystkich wystąpień wzorca
W tym kodzie zastosowano wyrażenie regularne ( d+> ) aby znaleźć wszystkie ciągi jednej lub więcej cyfr w danym ciągu. Wyszukuje wartości liczbowe i zapisuje je na liście. W tym przykładzie wyszukuje i drukuje liczby 123456789 I 987654321 z ciągu wejściowego.
Python3
import> re> string>=> '''Hello my Number is 123456789 and> >my friend's number is 987654321'''> regex>=> 'd+'> > match>=> re.findall(regex, string)> print>(match)> |
>
bash dla pętli
>Wyjście
['123456789', '987654321']>
2. ponownie skompiluj()
Wyrażenia regularne są kompilowane w obiekty wzorców, które zawierają metody umożliwiające różne operacje, takie jak wyszukiwanie dopasowań wzorców lub wykonywanie podstawień ciągów.
Przykład 1:
W kodzie zastosowano wzorzec wyrażenia regularnego [a-e]> aby znaleźć i wyświetlić listę wszystkich małych liter od „a” do „e” w ciągu wejściowym Tak, powiedział pan Gibenson Stark. Dane wyjściowe będą ['e', 'a', 'd', 'b', 'e']> , które są pasującymi znakami.
Pyton
import> re> p>=> re.>compile>(>'[a-e]'>)> > print>(p.findall(>'Aye, said Mr. Gibenson Stark'>))> |
>
>Wyjście
['e', 'a', 'd', 'b', 'e', 'a']>
Zrozumienie wyników:
- Pierwsze wystąpienie to „e” w wyrazie Aye, a nie „A”, ponieważ rozróżniana jest wielkość liter.
- Następne wystąpienie to „a” w słowach, następnie „d” w słowach, po których następują „b” i „e” w języku Gibenson, ostatnie „a” pasuje do Starka.
- Ukośnik odwrotny metaznaku „” odgrywa bardzo ważną rolę, ponieważ sygnalizuje różne sekwencje. Jeżeli ukośnik odwrotny ma być użyty bez jego specjalnego znaczenia jako metaznaku, użyj’’
Przykład 2: Ustaw klasę [s,.] dopasuje dowolny biały znak, „,” lub „.”.
Kod używa wyrażeń regularnych do wyszukiwania i wyświetlania wszystkich pojedynczych cyfr i sekwencji cyfr w podanych ciągach wejściowych. Znajduje pojedyncze cyfry za pomocą d> i ciągi cyfr z d+> .
Pyton
import> re> p>=> re.>compile>(>'d'>)> print>(p.findall(>'I went to him at 11 A.M. on 4th July 1886'>))> > p>=> re.>compile>(>'d+'>)> print>(p.findall(>'I went to him at 11 A.M. on 4th July 1886'>))> |
>
>Wyjście
['1', '1', '4', '1', '8', '8', '6'] ['11', '4', '1886']>
Przykład 3:
Kod używa wyrażeń regularnych do wyszukiwania i wyświetlania znaków wyrazów, sekwencji znaków wyrazów i znaków niebędących wyrazami w ciągach wejściowych. Zawiera listę pasujących znaków lub sekwencji.
Pyton
import> re> > p>=> re.>compile>(>'w'>)> print>(p.findall(>'He said * in some_lang.'>))> > p>=> re.>compile>(>'w+'>)> print>(p.findall('I went to him at>11> A.M., he> said>*>*>*> in> some_language.'))> > p>=> re.>compile>(>'W'>)> print>(p.findall(>'he said *** in some_language.'>))> |
>
>Wyjście
['H', 'e', 's', 'a', 'i', 'd', 'i', 'n', 's', 'o', 'm', 'e', '_', 'l', 'a', 'n', 'g'] ['I', 'went', 'to', 'him', 'at', '11', 'A', 'M', 'he', 'said', 'in', 'some_language'] [' ', ' ', '*', '*', '*', ' ...>
Przykład 4:
W kodzie zastosowano wzorzec wyrażenia regularnego „ab*”, aby znaleźć i wyświetlić listę wszystkich wystąpień słowa „ab”, po którym następuje zero lub więcej znaków „b” w ciągu wejściowym ababbaabbb. Zwraca następującą listę dopasowań: [„ab”, „abb”, „abbb”].
Pyton
import> re> p>=> re.>compile>(>'ab*'>)> print>(p.findall(>'ababbaabbb'>))> |
>
sznurek do niego
>Wyjście
['ab', 'abb', 'a', 'abbb']>
Zrozumienie wyników:
- Nasz RE to ab*, któremu „a” towarzyszy dowolne „nie”. liter „b”, zaczynając od 0.
- Wyjście „ab” jest prawidłowe, ponieważ pojedyncze „a” towarzyszy pojedynczemu „b”.
- Wyjście „abb” jest prawidłowe, ponieważ pojedyncze „a” towarzyszy 2 „b”.
- Wyjście „a” jest prawidłowe, ponieważ pojedyncze „a” towarzyszy 0 „b”.
- Wyjście „abbb” jest prawidłowe, ponieważ pojedyncze „a” towarzyszy 3 „b”.
3. ponownie.split()
Podziel ciąg znaków według wystąpień znaku lub wzorca. Po znalezieniu tego wzorca pozostałe znaki z ciągu zwracane są jako część wynikowej listy.
Składnia:
re.split(pattern, string, maxsplit=0, flags=0)>
Pierwszy parametr, wzór oznacza wyrażenie regularne, ciąg to podany ciąg, w którym będzie wyszukiwany wzorzec i w którym nastąpi dzielenie, maxsplit, jeśli nie zostanie podany, jest uważany za zero '0', a jeśli zostanie podana jakakolwiek wartość różna od zera, to co najwyżej występuje wiele podziałów. Jeśli maxsplit = 1, to ciąg zostanie podzielony tylko raz, w wyniku czego otrzymana zostanie lista o długości 2. Flagi są bardzo przydatne i mogą pomóc w skróceniu kodu, nie są niezbędnymi parametrami, np.: flags = re.IGNORECASE, w tym podziale , wielkość liter, tj. małe lub wielkie litery zostaną zignorowane.
Przykład 1:
Dzieli ciąg znaków, używając znaków innych niż słowa i spacji jako ograniczników, zwracając słowa: ['Words', 'words', 'Words']> . Traktuje apostrofy jako znaki niebędące wyrazami: ['Word', 's', 'words', 'Words']> . Dzieli przy użyciu znaków innych niż słowa i cyfr: ['On', '12th', 'Jan', '2016', 'at', '11', '02', 'AM']> . Dzieli przy użyciu cyfr jako ograniczników: ['On ', 'th Jan ', ', at ', ':', ' AM']> .
Pyton
from> re>import> split> > print>(split(>'W+'>,>'Words, words , Words'>))> print>(split(>'W+'>,>'Word's words Words'>))> print>(split(>'W+'>,>'On 12th Jan 2016, at 11:02 AM'>))> print>(split(>'d+'>,>'On 12th Jan 2016, at 11:02 AM'>))> |
>
>Wyjście
['Words', 'words', 'Words'] ['Word', 's', 'words', 'Words'] ['On', '12th', 'Jan', '2016', 'at', '11', '02', 'AM'] ['On ', 'th Jan ', ', at ', ':', ' AM']>
Przykład 2:
Pierwsza instrukcja dzieli ciąg znaków przy pierwszym wystąpieniu jednej lub większej liczby cyfr: ['On ', 'th Jan 2016, at 11:02 AM']> . sekunda dzieli ciąg znaków, używając małych liter od a do f jako ograniczników, bez uwzględniania wielkości liter: ['', 'y, ', 'oy oh ', 'oy, ', 'ome here'> ]>. Trzeci dzieli ciąg znaków, używając małych liter od a do f jako ograniczników, z uwzględnieniem wielkości liter: ['', 'ey, Boy oh ', 'oy, ', 'ome here']> .
Pyton
import> re> print>(re.split(>'d+'>,>'On 12th Jan 2016, at 11:02 AM'>,>1>))> print>(re.split(>'[a-f]+'>,>'Aey, Boy oh boy, come here'>, flags>=>re.IGNORECASE))> print>(re.split(>'[a-f]+'>,>'Aey, Boy oh boy, come here'>))> |
>
>Wyjście
['On ', 'th Jan 2016, at 11:02 AM'] ['', 'y, ', 'oy oh ', 'oy, ', 'om', ' h', 'r', ''] ['A', 'y, Boy oh ', 'oy, ', 'om', ' h', 'r', '']>
4. re.sub()
Sub w funkcji oznacza SubString, w podanym ciągu znaków (3. parametr) przeszukiwany jest określony wzorzec wyrażenia regularnego i po znalezieniu wzorca podciągu zastępowany jest przez repl (2. parametr), count sprawdza i utrzymuje liczbę razy to się dzieje.
Składnia:
re.sub(pattern, repl, string, count=0, flags=0)>
Przykład 1:
- Pierwsza instrukcja zastępuje wszystkie wystąpienia „ub” przez „~*” (wielkość liter nie ma znaczenia):
'S~*ject has ~*er booked already'>. - Druga instrukcja zastępuje wszystkie wystąpienia „ub” przez „~*” (wielkość liter ma znaczenie):
'S~*ject has Uber booked already'>. - Trzecia instrukcja zastępuje pierwsze wystąpienie „ub” przez „~*” (wielkość liter nie ma znaczenia):
'S~*ject has Uber booked already'>. - Czwarty zastępuje „AND” przez „&” (wielkość liter nie ma znaczenia):
'Baked Beans & Spam'>.
Pyton
import> re> print>(re.sub(>'ub'>,>'~*'>,>'Subject has Uber booked already'>,> >flags>=>re.IGNORECASE))> print>(re.sub(>'ub'>,>'~*'>,>'Subject has Uber booked already'>))> print>(re.sub(>'ub'>,>'~*'>,>'Subject has Uber booked already'>,> >count>=>1>, flags>=>re.IGNORECASE))> print>(re.sub(r>'sANDs'>,>' & '>,>'Baked Beans And Spam'>,> >flags>=>re.IGNORECASE))> |
>
>Wyjście
S~*ject has ~*er booked already S~*ject has Uber booked already S~*ject has Uber booked already Baked Beans & Spam>
5. ponownie.subn()
subn() jest podobna do sub() pod każdym względem, z wyjątkiem sposobu dostarczania danych wyjściowych. Zwraca krotkę z liczbą całkowitej zamiany i nowym ciągiem, a nie tylko ciągiem.
Składnia:
re.subn(pattern, repl, string, count=0, flags=0)>
Przykład:
re.subn()> zastępuje wszystkie wystąpienia wzorca w ciągu i zwraca krotkę ze zmodyfikowanym ciągiem i liczbą dokonanych podstawień. Jest to przydatne zarówno w przypadku podstawień uwzględniających wielkość liter, jak i niewrażliwych na wielkość liter.
Pyton
import> re> > print>(re.subn(>'ub'>,>'~*'>,>'Subject has Uber booked already'>))> > t>=> re.subn(>'ub'>,>'~*'>,>'Subject has Uber booked already'>,> >flags>=>re.IGNORECASE)> print>(t)> print>(>len>(t))> print>(t[>0>])> |
>
>Wyjście
('S~*ject has Uber booked already', 1) ('S~*ject has ~*er booked already', 2) 2 S~*ject has ~*er booked already> 6. ponowna ucieczka()
Zwraca ciąg znaków ze wszystkimi znakami innymi niż alfanumeryczne z ukośnikiem odwrotnym. Jest to przydatne, jeśli chcesz dopasować dowolny ciąg literałowy, który może zawierać metaznaki wyrażeń regularnych.
Składnia:
re.escape(string)>
Przykład:
re.escape()> służy do ucieczki znaków specjalnych w ciągu, dzięki czemu można go bezpiecznie używać jako wzorca w wyrażeniach regularnych. Zapewnia to, że wszelkie znaki o specjalnym znaczeniu w wyrażeniach regularnych będą traktowane jako znaki dosłowne.
Pyton
import> re> print>(re.escape(>'This is Awesome even 1 AM'>))> print>(re.escape(>'I Asked what is this [a-9], he said ^WoW'>))> |
>
>Wyjście
This is Awesome even 1 AM I Asked what is this [a-9], he said ^WoW>
7. ponowne wyszukiwanie()
Ta metoda albo zwraca None (jeśli wzorzec nie pasuje), albo re.MatchObject zawiera informację o pasującej części ciągu. Ta metoda kończy się po pierwszym dopasowaniu, dlatego najlepiej nadaje się do testowania wyrażeń regularnych, a nie do wyodrębniania danych.
blokuj reklamy YouTube na Androidzie
Przykład: Wyszukiwanie wystąpienia wzorca
Ten kod używa wyrażenia regularnego do wyszukiwania wzorca w podanym ciągu. Jeśli zostanie znalezione dopasowanie, wyodrębnia i wypisuje dopasowane fragmenty ciągu.
W tym konkretnym przykładzie wyszukuje wzorzec składający się z miesiąca (litery), po którym następuje dzień (cyfry) w ciągu wejściowym Urodziłem się 24 czerwca. Jeśli zostanie znalezione dopasowanie, wypisuje pełne dopasowanie, czyli miesiąc i dzień.
Python3
import> re> regex>=> r>'([a-zA-Z]+) (d+)'> > match>=> re.search(regex,>'I was born on June 24'>)> if> match !>=> None>:> >print> (>'Match at index %s, %s'> %> (match.start(), match.end()))> >print> (>'Full match: %s'> %> (match.group(>0>)))> >print> (>'Month: %s'> %> (match.group(>1>)))> >print> (>'Day: %s'> %> (match.group(>2>)))> > else>:> >print> (>'The regex pattern does not match.'>)> |
>
>Wyjście
Match at index 14, 21 Full match: June 24 Month: June Day: 24>
ZESTAWY
A Ustawić to zestaw znaków ujętych w nawiasy „[]”. Zestawy służą do dopasowywania pojedynczego znaku w zestawie znaków określonym w nawiasach. Poniżej lista zestawów:
| Ustawić | Opis |
|---|---|
| {N,} | Kwantyfikuje poprzedzający znak lub grupę i dopasowuje co najmniej n wystąpień. |
| * | Kwantyfikuje poprzedzający znak lub grupę i dopasowuje zero lub więcej wystąpień. |
| [0123] | Dopasowuje określone cyfry (0, 1, 2 lub 3) |
| [^arn] | pasuje do dowolnego znaku Z WYJĄTKIEM a, r i n |
| D | Pasuje do dowolnej cyfry (0-9). |
| [0-5][0-9] | dopasowuje dowolne liczby dwucyfrowe od 00 do 59 |
| w | Dopasowuje dowolny znak alfanumeryczny (a-z, A-Z, 0-9 lub _). |
| [jakiś] | Dopasowuje dowolne małe litery pomiędzy a i n. |
| D | Dopasowuje dowolny znak inny niż cyfra. |
| [arn] | dopasowuje miejsce, w którym występuje jeden z określonych znaków (a, r lub n). |
| [a-zA-Z] | dopasowuje dowolny znak od a do z, małą lub wielką literę |
| [0-9] | dopasowuje dowolną cyfrę od 0 do 9 |
Dopasuj obiekt
Obiekt Match zawiera wszystkie informacje o wyszukiwaniu i wyniku. Jeśli nie znaleziono żadnego dopasowania, zwrócona zostanie wartość None. Przyjrzyjmy się niektórym powszechnie używanym metodom i atrybutom obiektu dopasowania.
1. Pobieranie ciągu znaków i wyrażenia regularnego
mecz.re atrybut zwraca przekazane wyrażenie regularne i dopasowanie.ciąg atrybut zwraca przekazany ciąg.
Przykład: Pobieranie ciągu znaków i wyrażenia regularnego dopasowanego obiektu
Kod szuka litery G na granicy słowa w ciągu Witamy w GeeksForGeeks i drukuje wzorzec wyrażenia regularnego ( res.re> ) i oryginalny ciąg ( res.string> ) .
Python3
import> re> s>=> 'Welcome to GeeksForGeeks'> res>=> re.search(r>'G'>, s)> > print>(res.re)> print>(res.string)> |
>
>Wyjście
re.compile('G') Welcome to GeeksForGeeks> 2. Pobieranie indeksu dopasowanego obiektu
- Metoda start() zwraca indeks początkowy dopasowanego podłańcucha
- Metoda end() zwraca indeks końcowy dopasowanego podłańcucha
- Metoda span() zwraca krotkę zawierającą początkowy i końcowy indeks dopasowanego podłańcucha
Przykład: Pobieranie indeksu dopasowanego obiektu
Kod wyszukuje podciąg Gee na granicy słowa w ciągu Witamy w GeeksForGeeks i wypisuje indeks początkowy dopasowania (res.start()>), indeks końcowy dopasowania (res.end()>) i długość dopasowania (res.span()>).
Python3
import> re> > s>=> 'Welcome to GeeksForGeeks'> > res>=> re.search(r>'Gee'>, s)> > print>(res.start())> print>(res.end())> print>(res.span())> |
>
>Wyjście
11 14 (11, 14)>
3. Uzyskanie dopasowanego podciągu
Metoda group() zwraca część ciągu, dla której pasują wzorce. Aby lepiej zrozumieć, zobacz poniższy przykład.
Przykład: Uzyskiwanie dopasowanego podciągu
Kod wyszukuje sekwencję dwóch znaków innych niż cyfry, po których następuje spacja i litera „t” w ciągu Witamy w GeeksForGeeks i drukuje dopasowany tekst za pomocą res.group()> .
Python3
import> re> s>=> 'Welcome to GeeksForGeeks'> res>=> re.search(r>'D{2} t'>, s)> print>(res.group())> |
>
>Wyjście
me t>
W powyższym przykładzie nasz wzorzec określa ciąg znaków zawierający co najmniej 2 znaki, po których następuje spacja, a po tej spacji następuje t.
Powiązany artykuł:
Odniesienie:
https://docs.python.org/2/library/re.html
Omówiliśmy RegEx w Pythonie, przeszliśmy przez metaznaki, funkcje i sekwencje specjalne w RegEx Python.
Wyrażenie regularne jest bardzo ważnym pojęciem w Pythonie, staraliśmy się to wyjaśnić w łatwy sposób. Mam nadzieję, że pomoże to w Twojej podróży w Pythonie!!