Hledání
Novinky
Návštěvy
Dnes: 58
Celkem: 8001

Nové textové funkce začínající na Regex

  • Ukázka funkce Regextext
    Ukázka funkce Regextext
  • Regextext pro hledání čísel
    Regextext pro hledání čísel
  • Funkce Regexextrahovat
    Funkce Regexextrahovat
  • Regexextrahovat-více výskytů
    Regexextrahovat-více výskytů
  • Funkce Regexexnahradit
    Funkce Regexexnahradit

Vím, že textové funkce jsou celkem málo využívané, i když mohou být v mnoha případech hodně užitečné (viz příručka Excel v příkladech (https://eshop.m-skoleni.cz/?4,sablony-a-navody-v-ms-office)) a mohou pomoci při zpracování dat načtených například z různých databází.

Během minulého roku ale byly do skupiny textových funkcí přidány tři velmi zajímavé funkce začínající na Regex jako pro práci s regulárními výrazy. Jedná se o funkce Regextest, Regexextrahovat a Regexreplace. Myslím, že výrazně rozšiřují možnosti práce s textem a regulárními výrazy, což určitě usnadňuje provádění zajímavých textových operací. Vyzkoušejte je a objevte, jak vám mohou usnadnit práci.

 Funkce Regextest

V situaci, kdy je třeba ověřit, zda se určitý výraz (zadaný text) nachází v určitých buňkách. Pokud existuje shoda, pak funkce vrátí hodnotu Pravda. Pokud se tam daný výraz nenachází, tak funkce vrátí hodnotu Nepravda. Pravidla zápisu je:

=REGEXTEST(text; pattern; case_sensitivity),

kde argument text je text nebo odkaz na buňku, v kterém se má vyhledávat. Další argument pattern (vzor) je regulární výraz, prakticky to, co se má vyhledávat (ověřovat) v předchozím textu. A poslední argument case_sensitivity je sice nepovinný, ale určuje to, zda se mají rozlišovat velká a malá písmena. Přičemž výchozí hodnota je 0, to znamená, že se mají porovnávat. Pokud zadáte 1, pak se porovnávat nebudou.

 Funkce Regexextrahovat

Tato funkce umožňuje extrahovat text z řetězce na základě zadaného regulárního výrazu. Lze vyextrahovat první shodu, všechny shody nebo jen skupiny z první shody. Možná si řeknete, proč extrahovat hledané znaky (obr 3)? Ale zajímavé je právě možnost extrahování skupin (například malá písmena, pouze čísla, ...). Syntaxe této funkce je

=REGEXEXTRAHOVAT(text; pattern; return_mode; case_sensitivity),

kde argument text je text nebo odkaz na buňku, v kterém se má vyhledávat. Další argument pattern (vzor) je regulární výraz, prakticky to, co se má vyhledat a vyextrahovat v předchozím textu. Argument return_mode zase určuje, jaké řetězce se mají extrahovat (0 znamená jen první shoda, 1 je zase všechny shody a 2 znamená výběr skupin z první shody), přičemž výchozí hodnota je 0.

A poslední argument case_sensitivity je sice nepovinný, ale určuje to, zda se mají rozlišovat velká a malá písmena. Přičemž výchozí hodnota je 0, to znamená, že se mají porovnávat. Pokud zadáte 1, pak se porovnávat nebudou.

Ještě je třeba dodat, že funkce Regexextrahovat vrací textové hodnoty. To znamená, když se funkcí získají čísla v textovém formátu, je třeba je převést pomocí funkce Hodnota na číslo.

 Funkce Regexnahradit

Určitě zajímavá funkce, protože umožňuje nahradit text v řetězci jiným řetězcem na základě zadaného regulárního výrazu. Její tvar je

=REGEXNAHRADIT(text, pattern; replacement; occurrence; case_sensitivity),

kde argument text je text nebo odkaz na buňku, v kterém se má vyhledávat. Další argument pattern (vzor) je regulární výraz, prakticky to, co se má vyhledat a zaměnit v předchozím textu. Argument replacement bude obsahovat text, kterým se má nahradit text v argumentu pattern. Argument occurrence určuje, který výskyt se má nahrazovat. Protože se jedná o nepovinný argument, tak ve výchozím nastavení má výskyt hodnotu 0, která nahrazuje všechny výskyty. Pokud se zde napíše záporné číslo nahradí se výskyt hledáním od konce.

A poslední argument case_sensitivity je sice nepovinný, ale určuje to, zda se mají rozlišovat velká a malá písmena. Přičemž výchozí hodnota je 0, to znamená, že se mají porovnávat. Pokud zadáte 1, pak se porovnávat nebudou.

Normální záměna textů je asi jednoduchá a jasná. Ale v argumentu pattern (platí pro všechny uvedené funkce) mohou být i jakési symboly (označované jako tokeny), které odpovídají různým znakům. 

 Jak je to s argumentem pattern

Při zápisu argumentu pattern (vzor) u jednotlivých funkcí je užitečné vědět, že kromě konkrétních textů se dají použít i jakési symboly (označované jako tokeny), které odpovídají různým znakům. 

[0-9] znamená, že se má hledat libovolná číslice,

[a-z] vyhledá znak v rozsahu malých písmen a až z,

[A-Z] vyhledá znak v rozsahu velkých písmen A až Z a třeba "." znamená libovolný znak.

Pak "^a"   stříška znamená začátek řetězce textu, v němž se vyhledává a "a$" - nachází se na konci v hledaném řetězci, končí "a". 

Ještě je dobré vědět, že pokud se napíše "a", pak se vyhledává znak "a", pokud "a*", pak se vyhledá nula nebo více písmen "a", jestliže se napíše "a?" tak se vyhledá žádný nebo právě jeden výskyt znaku "a", a při zápisu "a+" se vyhledá jeden nebo více "a". 

Pak třeba a{n} - počet výskytu "a" má být n, a{n,m} - počet výskytu "a" je n až m (například když se zapíše 10{3,5}, pak by se vyhledala jednička a skupinu tří až pěti nul – 1000, 10000, 100000). Potom může být a{n,} - počet výskytu "a" je n nebo více za sebou.

Zajímavostí může být i zápis "[aeiou]", který vyhledá, zda výraz obsahuje nějaké samohlásky. To znamená, že v hranatých závorkách jsou jakékoliv znaky, které se mají vyhledávat [adc456].

Pak se vyhledávání dá rozšířit ještě pomocí definování seskupení ve vzorci v kulatých závorkách (). Při nahrazování se pak dá na dané skupiny odkazovat jako na "$n". Tedy například se dá ve vzorci napsat $3 (odkaz na třetí skupinu) či $1 (odkaz na první skupinu).