Wyrażenia regularne Pythona z przykładami
- 4241
- 15
- Seweryn Augustyniak
Wyrażenie regularne (często skrócone do „Regex”) jest techniką i wzorem tekstowym, który określa, w jaki sposób chce się wyszukać lub zmodyfikować dany ciąg. Wyrażenia regularne są powszechnie stosowane w skonstrukcjach powłoki bash i w kodzie Python, a także w różnych innych językach programowania.
W tym samouczku nauczysz się:
- Jak zacząć od wyrażeń regularnych na Python
- Jak zaimportować moduł Regex Python
- Jak dopasować struny i znaki za pomocą notacji Regex
- Jak korzystać z najczęstszych notacji Regex Python
Zastosowane wymagania i konwencje oprogramowania
Kategoria | Wymagania, konwencje lub wersja oprogramowania |
---|---|
System | Każdy system operacyjny GNU/Linux |
Oprogramowanie | Python 2, Python 3 |
Inny | Uprzywilejowany dostęp do systemu Linux jako root lub za pośrednictwem sudo Komenda. |
Konwencje | # - Wymaga, aby podane polecenia Linux są wykonywane z uprawnieniami root bezpośrednio jako użytkownik root lub za pomocą sudo Komenda$ - Wymaga, aby podane polecenia Linux zostały wykonane jako zwykły użytkownik niepewny |
Przykłady wyrażeń regularnych Python
W Pythonie chce się zaimportować Odnośnie
moduł umożliwiający użycie wyrażeń regularnych.
Przykład 1 zacznijmy od prostego przykładu:
$ Python3 Python 3.8.2 (domyślnie, 27 kwietnia 2020, 15:53:34) [GCC 9.3.0] w typu Linux „Pomoc”, „Copyright”, „Kredyty” lub „licencja”, aby uzyskać więcej informacji. >>> Drukuj („Hello World”) Hello World >>> Importuj Re >>> Drukuj (ponownie.mecz ('^.','Witaj świecie'))
Kopiuj Tutaj po raz pierwszy wydrukowaliśmy Witaj świecie
Linia 5to Pokazaj prostą konfigurację drukowania. Następnie zaimportowaliśmy moduł Regex Odnośnie
Linia 7Enbing nas do korzystania z .mecz
Funkcja linii wyrażenia regularnego 8 -mecz tej biblioteki.
Składnia .mecz
Funkcja to (wzór, ciąg), w którym wzorzec zdefiniowano jako wyrażenie regularne ^.
'I użyliśmy tego samego Witaj świecie
ciąg jako nasz ciąg wejściowy.
Jak widać, w liście znaleziono mecz H
. Powodem tego meczu jest wzór wyrażenia regularnego, a mianowicie; ^
oznacza Początek ciągu I .
oznacza Dopasuj dowolną postać (z wyjątkiem Newline).
Zatem, H
znaleziono, ponieważ litera ta jest bezpośrednio po „rozpoczęciu ciągu” i jest opisana jako „dowolna postać, H
w tym przypadku".
Te szczególne konotacje są identyczne z wyrażeniami regularnymi w skryptach BASH, a inne aplikacje uwzględniające regex, których wszystkie używają bardziej lub mniej uuznotania standardu regularnego wyrażenia, chociaż istnieją różnice między językami, a nawet konkretnymi implementacjami, jeśli zagłębiasz się w wyrażenia regularne dalej.
Przykład 2
>>> wydrukuj (ponownie.mecz („… W”, „Hello World”))
Kopiuj Tutaj używamy .
Aby dopasować dowolną postać (z wyjątkiem Newline) i robimy to 6 razy przed dopasowaniem dosłownego charakteru W
.
Jak widzisz Witam w
(7 znaków) zostało dopasowane. Co ciekawe, ten program jako rozprzestrzeni się (0,7), którego nie należy odczytać jako 0-7 (czyli 8 znaków), ale jako „zacznij od 0” „+7 znaków”, jak można również zerkać z innych przykładów w tym artykuł.
Przykład 3 weźmy kolejny, nieco bardziej złożony przykład:
>>> wydrukuj (ponownie.mecz ('^h [elo]+', „hello świat”)))
Kopiuj Składnia w tym przypadku jest:
- ^: Jak opisano powyżej, można również odczytać jako „to musi być początek ciągu”
- H: musi pasować
H
W tej dokładnej lokalizacji (która jest bezpośrednio po/na początku łańcucha) - [Elo]+: Dopasuj też
mi
,L
Lubo
(„albo” zdefiniowane przez[' I ']
) I+
oznacza „jeden lub więcej z nich”
Zatem, Cześć
był dopasowany jako H
był rzeczywiście na początku sznurka i mi
I o
I L
zostały dopasowane jeden lub więcej razy (w dowolnej kolejności).
Przykład trzech dla super złożonego?
>>> wydrukuj (ponownie.findall ('^[he]+ll [o \ t]+wo [rl].+$ ', „Hello World”)) [„Hello World”];
Kopiuj Tutaj użyliśmy innej funkcji modułu Re, a mianowicie Znajdź wszystko
który natychmiast daje znaleziony ciąg i używa tej samej składni (wzór, ciąg).
Dlaczego zrobił Witaj świecie
Dopasuj w całości? Złammy to krok po kroku:
- ^: Początek ciągu
- [On]+: Mecze
H
Imi
1 lub więcej razy, a zatemOn
jest dopasowany - ll: dosłowne dopasowanie
ll
w tym dokładnym miejscu, a zatem rzeczywiściell
jest dopasowany, ponieważ pojawił się bezpośrednioOn
- [o \ t]+: Dopasuj też
"
(przestrzeń) lubo
, Lub\T
(karta) i to 1 lub więcej razy, a zatemo
(o przestrzeń) dopasowane. Gdybyśmy użyli zakładki zamiast przestrzeni, ten regex nadal działałby! - Wo: Dosłowny mecz
Wo
- [rl]: Dopasuj też
R
LubL
. Patrz uważnie; tylkoR
jest dopasowany tutaj! Nie ma+
za]
Więc tylko jedna postać,R
LubL
zostanie dopasowany w tej pozycji. Więc dlaczegorld
Wciąż dopasowane? Odpowiedź jest w następnym kwalifikacjach; - .+: Dopasuj dowolną postać (oznaczoną przez
.
) jeden lub więcej razyL
ID
oba są dopasowane, a nasz ciąg jest kompletny - $: Podobny do
^
, Ta postać oznacza „koniec ciągu”.
Innymi słowy, gdybyśmy umieścili to na początku, czy gdzie indziej pośrodku, Regex byłby niedopasowany.
Jako przykład:
>>> wydrukuj (ponownie.FINDALL ('^Hello $', „Hello World ')) [] >>> drukuj (rep.findall ('^hello $', 'hello')) [] >>> drukuj (rep.findall ('^hello $', 'hello')) ['hello'] >>> drukuj (rep.Findall („^Hello”, „Hello World”)) [„Hello”]
Kopiuj Tutaj nie zwracano żadnego wyjścia dla dwóch pierwszych druków, ponieważ próbujemy dopasować ciąg, który można odczytać jako „start_of_string”-Cześć
-„End_of_string”, jak oznaczono przez ^Witaj $
, przeciwko Witaj świecie
który nie pasuje.
W trzecim przykładzie ^Witaj $
mecze Cześć
Ponieważ w żadnych dodatkowych znakach w Cześć
ciąg, który spowodowałby, że ten regular. Wreszcie, ostatni przykład pokazuje częściowe dopasowanie bez wymogu „end_of_string” ($).
Widzieć? Już stajesz się ekspertem od wyrażeń regularnych! Wyrażenia regularne mogą być zabawne i są bardzo potężne!
Przykład 4
Istnieją różne inne funkcje w Odnośnie
Moduł Python, jak Odnośnie.pod, Odnośnie.podział, Odnośnie.Subn, Odnośnie.szukaj, każdy z odpowiednimi domenami przypadków użycia. Spójrzmy na Re.Sub następny:
>>> wydrukuj (ponownie.sub („^hello”, „pa pa”, „hello świat”)) pa pa
Kopiuj String String Siptitution jest jedną z najpotężniejszych zastosowań wyrażeń regularnych, w Python i innych językach kodowania. W tym przykładzie szukaliśmy ^Witam
i zastąpił to PA pa
w ciągu Witaj świecie
. Czy widzisz, jak byłoby to bardzo przydatne do przetwarzania wszelkiego rodzaju zmiennych i strun tekstowych, a nawet całego płaskiego plików tekstowych?
Przykład 5
Spójrzmy na kilka bardziej złożonych przykładów, używając bardziej zaawansowanej składni Regex:
>>> wydrukuj (ponownie.sub („[0-9]+”, „_”, „Hello World 123”)) Hello World _
Kopiuj - [0-9]+: Dowolny znak numeryczny z
0
Do9
, jeden lub więcej razy.
Czy widzisz, jak 123
został zastąpiony jednym _
?
Przykład 6
>>> wydrukuj (ponownie.pod('(?i) [O-r]+', „_”, „Hello World 123”)) Hell_ W_ld 123
Kopiuj - (?i) [O-r]+: Dopasuj jeden lub więcej
O
DoR
lub - dzięki opcjonalnemuI
flaga -o
DoR
- (?I): ustawiaj wrażliwość na przypadek
I
flaga dla tego wzoru
>>> wydrukuj (ponownie.sub ('[1] 2', '_', „Hello World 111 ')) Hello World _1
Kopiuj - [1] 2: Dopasuj postać
1
Dokładnie dwa razy
Przykład 7
>>> wydrukuj (ponownie.sub („(świat)”, „\ g \ g”, „hello świat 123”)) Hello Worldworld 123
Kopiuj - (Świat): Dopasuj dosłowny tekst „świat” i uczyń go grupą, która może być użyta w zastąpieniu
- \ g \ g:
\G
Określa pierwszą grupę, która została dopasowana, ja.mi. tekstŚwiat
zaczerpnięte zHello World 123
ciąg, i jest to powtarzane dwa razy, co powodujeŚwiatowy świat
wyjście. /li>
Przykład 8
Aby uczynić to jasniej, rozważ następujące dwa przykłady:
>>> wydrukuj (ponownie.sub ('(o)', '\ g \ g \ g', „hello świat 123 ')) hellooo wooorld 123
Kopiuj W tym pierwszym przykładzie po prostu pasujemy o
i umieść go w grupie, a następnie powtórz tę grupę trzy razy na zewnątrz.
Zauważ, że gdybyśmy nie odwoływali się do grupy 1 (pierwsza dopasowana grupa, drugi przykład Ref), po prostu nie byłoby wyjścia, a wynik byłby:
>>> wydrukuj (ponownie.sub („(o)”, ”,„ Hello World 123 ”)) Hell Wrld 123
Kopiuj W drugim przykładzie rozważ:
>>> wydrukuj (ponownie.sub ('(o).*(r) ', „\ g \ g”, „Hello World 123”)) Hellorld 123
Kopiuj Tutaj mamy dwie grupy, pierwsza o
(Gdziekolwiek taka grupa pasuje, a jest to wyraźnie wiele, jak widać w pierwszym przykładzie), a druga istota R
. Dodatkowo używamy .*
co przekłada się na „dowolną postać, dowolną liczbę razy” - często używane wyrażenie regularne.
Więc w tym przykładzie O Wor
jest dopasowany przez (o).*(r) '(' o
Najpierw, potem dowolna postać do ostatniej R
został osiągnięty. Pojęcie „ostatnie” jest bardzo importowane i jest łatwe do popełnienia błędu/gejcha, szczególnie dla nowych użytkowników wyrażeń regularnych. Jako przykład, rozważ:
>>> wydrukuj (ponownie.sub ('e.*o ', „_”, „Hello World 123”)) h_rld 123
Kopiuj Czy widzisz, jak ostatni o
został dopasowany?
Powrót do naszego przykładu:
>>> wydrukuj (ponownie.sub ('(o).*(r) ', „\ g \ g”, „Hello World 123”)) Hellorld 123
Kopiuj Widzimy to O Wor
został zastąpiony meczem grupy 1, a następnie meczu grupy 2, w wyniku czego: O Wor
zastępowane przez Lub
a zatem wyjście jest Hellorld 123
.
Wniosek
Spójrzmy na niektóre z najczęstszych notacji wyrażeń regularnych dostępnych w Python, dopasowane do niektórych lekkich implementacji tego samego:
Notacja Regex | Opis |
---|---|
. | Każda postać, z wyjątkiem nowości |
[a-c] | Jeden znak wybranego zakresu, w tym przypadku A, B, C |
[A-Z] | Jeden znak wybranego zakresu, w tym przypadku A-Z |
[0-9af-z] | Jeden znak wybranego zakresu, w tym przypadku 0-9, a i f-z |
[^A-za-z] | Jedna postać poza wybranym zakresem, w tym przypadku na przykład „1” kwalifikowałby się |
* | Dowolna liczba meczów (0 lub więcej) |
+ | 1 lub więcej meczów |
? | 0 lub 1 dopasowanie |
3 | Dokładnie 3 mecze |
() | Grupa przechwytywania. Po raz pierwszy jest to używane, liczba grupy to 1 itp. |
\G | Użyj (wstaw) grupy Capture Match, kwalifikowana przez liczbę (1-x) grupy |
\G | Grupa specjalna 0 wstawia cały dopasowany ciąg |
^ | Początek ciągu |
$ | Koniec ciągu |
\D | Jedna cyfra |
\D | Jeden nie cyfr |
\S | Jedna biała oddział |
\S | Jedna nie-biała |
(?I) | Zignoruj prefiks flagi, jak pokazano powyżej |
a | d | Jedna postać z nich (alternatywa dla używania []), „a” lub „d” |
\ | Ucieka z postaciami specjalnymi |
\B | Postać backspace |
\N | Nowa postać |
\R | Znak powrotu powozu |
\T | Znak tablicy |
Ciekawy? Gdy zaczniesz używać wyrażeń regularnych, w dowolnym języku, wkrótce przekonasz się, że zaczniesz je używać wszędzie - w innych językach kodowania, w ulubionym edytorze tekstu, w wierszu poleceń (patrz „SED” dla użytkowników Linux), itp.
Prawdopodobnie przekonasz się, że zaczniesz używać ich bardziej ad hoc, ja.mi. Nie tylko w kodowaniu. Istnieje coś z natury potężnego, aby móc kontrolować wszelkiego rodzaju wyjście wiersza poleceń, na przykład list katalogu i plików, skryptowanie i zarządzanie tekstem z płaskiego pliku.
Ciesz się postępami w nauce i opublikuj poniżej niektóre z najpotężniejszych przykładów wyrażenia regularnego!
Powiązane samouczki Linux:
- Advanced Bash Regex z przykładami
- Bash Regexps dla początkujących z przykładami
- Mastering Bash Script Loops
- Wprowadzenie do automatyzacji, narzędzi i technik Linuksa
- Rzeczy do zainstalowania na Ubuntu 20.04
- Zagnieżdżone pętle w skryptach Bash
- Manipulacja Big Data dla zabawy i zysku Część 3
- Obsługa danych wejściowych użytkownika w skryptach Bash
- Utwórz przekieruj i przepisuj reguły do .Htaccess na Apache…
- Mint 20: Lepsze niż Ubuntu i Microsoft Windows?
- « Jak zainstalować kodeki i dodatki stron trzecich na Manjaro Linux
- Jak zainstalować pakiet od AUR na Manjaro Linux »