
Python je multiplatformní jazyk oblíbený pro svou jednoduchost a stručnost. Jeho hlavní předností je srozumitelná a čistá syntaxe. Díky své jednoduchosti bývá označován jako jeden z nejvhodnějších programovacích jazyků pro začátečníky.
Python má pro práci s Regulárními výrazy celou škálu zabudovaných knihoven. Standardním modulem pro práci s nimi je modul re. V modulu je zaintegrováno několik velice zajímavých funkcí, které využijeme zejména pro:
Funkce re.match je určena pro hledání výrazů na začátku stringů. Funkce vrací None, když výraz ve strinu nenajde. Pokud je výraz nalezen, vrací hledaný řetězec včetně informace o jeho pozici:
>>> import re
>>> string="Simple is better than complex."
>>> obj=re.match(r"Simple", string)
>>> obj
<_sre.SRE_Match object; span=(0, 6), match='Simple'>
>>> obj.start()
0
>>> obj.end()
6
Funkce re.search se od re.match liší pouze tím, že hledá v celém stringu. Jak vidno funkce v podstatě vrací totéž:
>>> import re
>>> string="Simple is better than complex."
>>> obj=re.search(r"is", string)
>>> obj.start()
7
>>> obj.end()
9
Funkci re.findall využijeme tehdy, když potřebujeme najít všechny hledané shodující se výrazy.
>>> import re
>>> string="Simple is better than complex."
>>> obj=re.findall(r"ple", string)
>>> obj
['ple', 'ple']
Něco jako klasický split(), jen pomocí regulárů. Například pro rozdělení pomocí whitespace:
>>> import re
>>> string="Simple is better than complex."
>>> obj=re.split(r' ',string)
>>> obj
['Simple', 'is', 'better', 'than', 'complex.']
>>> string.split(' ')
['Simple', 'is', 'better', 'than', 'complex.']
Tato funkce slouží pro nahrazování řetězců substitučním stringem. Syntax je takováto re.sub(pattern, replacement, string):
>>> string="Simple is better than complex. Complex is better than complicated."
>>> obj=re.sub(r'is', r'was',string)
>>> obj
'Simple was better than complex. Complex was better than complicated.'
Tato funkce zkopiluje regulární výraz jako objekt. To je užitečné, pokud chteme výraz používat několikrát opakovaně.
>>> string
'Simple is better than complex. Complex is better than complicated.'
>>> pattern=re.compile(r'is')
>>> obj=pattern.match(string)
>>> obj=pattern.search(string)
>>> obj.start()
7
>>> obj.end()
9
>>> obj=pattern.findall(string)
>>> obj
['is', 'is']
>>> obj=pattern.sub(r'was', string)
>>> obj
'Simple was better than complex. Complex was better than complicated.'
V regulárních výrazech mužeme používat výraz pro group. V pythonu ho zapisujeme pomocí \<číslo_grupy>. Vysvětlení jeho funkce je vidět v příkladu, číslo grupy je rovno počtu uzavřených kulatých závorek od začátku:
>>> emails=['aa@example.com', 'bb@abc.cz', 'cc@kernel.org']
>>> for email in emails:
... mail=re.sub(r'@\w+.(\w+)','@n0ip.\\1',email)
... print(mail)
...
aa@n0ip.com
bb@n0ip.cz
cc@n0ip.org
Stránky pro testovaní funkčnosti regularních výrazů: