IB111 Programování a algoritmizace Regulární výrazy Výběr souborů v OS  Zástupné znaky  „Wildcard characters“  Určitě znáte z běžné práce v OS  *.*  *.exe  A*.docx  ?.txt Manuál Zdroj: MSDN Regulární výrazy v Pythonu  Každý znak vyhoví sám sobě  Příklad  Výrazu ahoj vyhoví pouze ahoj  Speciální metaznaky mají jiný význam  Jedná se o znaky . ^ $ * + ? { } [ ] \ | ( ) Zdroj: Dokumentace jazyka Python Regulární výrazy v Pythonu  [ ]  Označují třídu znaků  Vyhoví jakýkoliv znak z uvedené třídy  Uvnitř závorek metaznaky ztrácejí svůj speciální význam  Příklad:  [abc] – vyhoví znakům a, b nebo c.  [a$] – vyhoví znak a nebo znak $ Zdroj: Dokumentace jazyka Python Skupiny znaků  Závorky [ ] můžeme doplnit znakem  Vyhoví jakýkoliv znak ze skupiny znaků specifikovaných od do  Je-li prvním znakem za závorkou ^, pak se skupina znaků bere jako negativně vymezená  Příklad  [a-z] – vyhoví jakýkoliv znak mezi a až z  [^a] – vyhoví jakýkoliv znak kromě a Zdroj: Dokumentace jazyka Python Skupiny znaků definované pomocí \  \d  Čísla: [0-9]  \D  Cokoliv kromě čísel: [^0-9]  \s  Bílé znaky: [ \t\n\r\f\v]  \S  Cokoliv kromě bílých znaků: [^ \t\n\r\f\v]  \w  Alfanumerické znaky: [a-zA-Z0-9_]  \W  Nealfanumerické znaky: [^a-zA-Z0-9_] Zdroj: Dokumentace jazyka Python Libovolný znak  Metaznak . vyhoví libovolnému znaku  Kromě znaku nového řádku  I tomu vyhoví pokud použijeme režim re.DOTALL Zdroj: Dokumentace jazyka Python Alternativa  Znak | znamená „nebo“  Příklad  kočka|pes Zdroj: Dokumentace jazyka Python Zpětné lomítko  \ má speciální funkci  Pro vyjádření porovnání se znakem \ musíme lomítko zdvojit, tj. \\  Pozor:  Lomítko je dále speciálním znakem u pythonovských řetězců  Proto ho musíme zdvojit ještě jednou, tj. \\\\  “\\\\begin“ znamená \begin  Nebo využijeme tzv. raw řetězce  r”\\section” znamená \begin Zdroj: Dokumentace jazyka Python Opakování znaků  Uvedení znaku * znamená možné opakovaní  Počet opakování: 0krát až mnohokrát  ca*t vyhoví ct, cat, caat, caaat, caaaat,…  porovnávání je „hladové“  Snaha porovnat maximum znaků  Příklad: pro výraz a[bcd]*b a řetězec abcbd bude shoda v abcb Zdroj: Dokumentace jazyka Python Hladovost  Hladovost lze potlačit přidáním znaku ?  *?  +?  ??  Příklad:  V HTML kódu použijeme výraz <.*>  U řetězce

title

vyhoví celý řetězec  <.*?> vyhoví jen

Zdroj: Dokumentace jazyka Python Opakování znaků  Uvedení znaku + znamená opakování předchozího 1krát až mnohokrát  Opakování tedy musí nastat minimálně jednou!  Opakování nulakrát nebo jedenkrát  Znak ?  home-?brew odpovídá jak homebrew tak home-brew Zdroj: Dokumentace jazyka Python Opakování znaků  Konstrukce {m,n}  Opakování minimálně m a maximálně n.  {0,} se chová jako *  {1,} se chová jako +  {0,1} se chová jako ? Zdroj: Dokumentace jazyka Python Pozice na řádku  ^ vyhoví začátku řetězce (a začátku novému řádku ve víceřádkovém režimu)  $ vyhoví konci řetězce (nebo konci řádku před znakem nového řádku) Zdroj: Dokumentace jazyka Python Užití v pythonu Zdroj: Dokumentace jazyka Python Užití v pythonu Zdroj: Dokumentace jazyka Python Metody tříd Zdroj: Dokumentace jazyka Python Kompilační volby Zdroj: Dokumentace jazyka Python Nahrazování řetězců Zdroj: Dokumentace jazyka Python Příklady Zdroj: http://gnosis.cx/publish/programming/regular_expressions.html Příklady Zdroj: http://gnosis.cx/publish/programming/regular_expressions.html Příklady Zdroj: http://gnosis.cx/publish/programming/regular_expressions.html Příklady Zdroj: http://gnosis.cx/publish/programming/regular_expressions.html Příklady Zdroj: http://gnosis.cx/publish/programming/regular_expressions.html Příklady Zdroj: http://gnosis.cx/publish/programming/regular_expressions.html