Python

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:

  • Filtrování textu
  • Vyhodnocování podmínek
  • Získávání proměných z obecných textů nebo kódu
  • Ověřovaní korentnosti řetězců
  • aj.

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ů: