From 25a10f48c3a60c743e8b2ad4e50352789e3768ec Mon Sep 17 00:00:00 2001 From: Jakub Pokrywka Date: Sun, 21 Nov 2021 22:16:09 +0100 Subject: [PATCH] add re description in README --- README.md | 131 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 131 insertions(+) diff --git a/README.md b/README.md index 554e8b1..726f967 100644 --- a/README.md +++ b/README.md @@ -43,3 +43,134 @@ Zadania robimy do końca soboty poprzedzającej zajęcia We własnym repozytorium: `git pull git@git.wmi.amu.edu.pl:kubapok/djfz-2021.git` + + + +## Zajęcia 2 21.11.2021 Wyrażenia regularne + +Dokumentacja wyrażeń regularnych w python3: https://docs.python.org/3/library/re.html + +### Podstawowe funkcje + +search - zwraca pierwsze dopasowanie w napisie + +findall - zwraca listę wszystkich dopasowań (nienakładających się na siebie) + +match - zwraca dopasowanie od początku string + +To tylko podstawowe funkcje, z których będziemy korzystać. W dokumentacji opisane są wszystkie. + +### Obiekt match + +``` +import re +answer = re.search('na','banan') +print(answer) +print(answer.start()) +print(answer.end()) +print(answer.group()) + +answer = re.search('na','kabanos') +print(answer) +type(answer) + +if answer: + print(answer.group()) +else: + pass +``` + +### Metaznaki + + +- [] - zbiór znaków +- . - jakikolwiek znak + +- ^ - początek napisu +- $ - koniec napisu + +- ? - znak występuje lub nie występuje +- \* - zero albo więcej pojawień się +- \+ - jeden albo więcej pojawień się +- {} - dokładnie tyle pojawień się + +- | - lub +- () - grupa +- \ -znak ucieczki + +- \d digit +- \D nie digit +- \s whitespace +- \S niewhitespace + + +### Flagi + +Można użyć specjalnych flag, np: +`re.search('ma', 'AlA Ma KoTa', re.IGNORECASE)`. + +### Przykłady (objaśnienia na laboratoriach) + +Do nauki lepiej użyć pythona w wersji interaktywnej, a najlepiej ipython. + +``` +import re + +text = 'Ala ma kota i hamak, oraz 150 bananów.' + +re.search('ma',text) +re.match('ma',text) +re.match('Ala ma',text) +re.findall('ma',text) + +re.findall('[mn]a',text) +re.findall('[0-9]',text) +re.findall('[0-9abc]',text) +re.findall('[a-z][a-z]ma[a-z]',text) +re.findall('[a-zA-Z][a-zA-Z]ma[a-zA-z0-9]',text) +re.findall('\d',text) + +re.search('[0-9][0-9][0-9]',text) +re.search('[\d][\d][\d]',text) + +re.search('\d{2}',text) +re.search('\d{3}',text) + +re.search('\d+',text) + +re.search('\d+ bananów',text) +re.search('\d* bananów','Ala ma dużo bananów') +re.search('\d* bananów',text) +re.search('ma \d? bananów','Ala ma 5 bananów') +re.search('ma ?\d? bananów','Ala ma bananów') +re.search('ma( \d)? bananów','Ala ma bananów') + +re.search('\d+ bananów','Ala ma 10 bananów albo 20 bananów') +re.search('\d+ bananów$','Ala ma 10 bananów albo 20 bananów') + +text = 'Ala ma kota i hamak, oraz 150 bananów.' + +re.search('\d+ bananów',text) + +re.search('\d+\sbananów',text) + +re.search('kota . hamak',text) + +re.search('kota . hamak','Ala ma kota z hamakiem') + +re.search('kota .* hamak','Ala ma kota lub hamak') + +re.search('\.',text) + +re.search('kota|psa','Ala ma kota lub hamak') + +re.findall('kota|psa','Ala ma kota lub psa') + +re.search('kota (i|lub) psa','Ala ma kota lub psa') + +re.search('mam (kota).*(kota|psa)','Ja mam kota. Ala ma psa.').group(0) + +re.search('mam (kota).*(kota|psa)','Ja mam kota. Ala ma psa.').group(1) + +re.search('mam (kota).*(kota|psa)','Ja mam kota. Ala ma psa.').group(2) +```