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