Vyhledáváme části elementu CATEGORYTEXT, třeba text za posledním svislítkem

Na naši technickou podporu chodí dotazy, jaké použít regulární výrazy pro vyhledání textu v elementu s kategorií (např. CATEGORYTEXT), který se nachází na určité pozici, např. za posledním svislítkem | (pokud je znak svislítko | oddělovačem úrovní kategorií). Pojďme se podívat na pár příkladů:

I. Jak najít text za posledním svislítkem:

  • nejjednodušší verze regulárního výrazu je hledat cokoliv, co není svislítko na konci řetězce: [^\|]+$

  • příklad co se najde:
    screenshot-regex101.com-2020.05.05-07_38_38

  • :exclamation:znak svislítko je sám o sobě regulárním výrazem pro “nebo” a pokud jej chceme hledat doslovně, jako obyčejný znak |, musíme jej v regulárním výrazu escapovat: \|

  • někomu třeba může vadit mezera na začátku nalezeného textu, ale ta jde v Mergadu odstranit jednoduchým pravidlem typu Najít a nahradit, kdy se do pole Najít zadá: ^\s+, zatrhne se hledání jako regulární výraz a pole Nahradit se nechá prázdné. :slight_smile:

  • jiné řešení, jak mezeru na začátku vyhledaného textu vůbec nemít, je rozdělit si text na části, z nichž použijeme jen tu poslední část: ukázka zde
    screenshot-regex101.com-2020.05.05-07_51_04

  • :question: Jak najít text za posledním oddělovačem úrovní kategorií, pokud tam není svislítko, ale např. ostrá závorka >?
    Stačí jen v regulárním výrazu výše nahradit znak \| za > :wink:

II. Jak najít text za posledním svislítkem včetně toho svislítka:

  • podobně jako výše, použijeme hledání na konci řetězce a ještě tam připíšeme oddělovač, který chceme zahrnout do výsledků hledání: \|[^\|]+$
  • příklad co se najde:
    screenshot-regex101.com-2020.05.05-07_56_29

III. Jak najít text na začátku, před prvním svislítkem:

  • budeme hledat od začátku řetězce jakýkoliv znak, který není svislítkem: ^[^\|]+
  • příklad co se najde:
    screenshot-regex101.com-2020.05.05-08_03_08
  • pokud nám vadí mezera na konci nalezeného textu, odstraníme ji v Mergadu pravidlem Najít a nahradit podobně, jak bylo popsáno výše, do pole Najít zadáme: \s+$, zatrhneme hledání jako regulární výraz a pole Nahradit necháme prázdné.
  • jiný způsob, jak mezeru na konci vyhledaného textu ani nemít, je rozdělit si text na části a použít jen tu první část, kterou chceme, ukázka zde
    screenshot-regex101.com-2020.05.05-08_10_09

IV. Jak najít text na začátku, před prvním svislítkem včetně toho svislítka:

  • podobně jako výše, použijeme hledání na začátku řetězce a ještě tam připíšeme oddělovač, který chceme zahrnout do výsledků hledání: ^[^\|]+\|
  • příklad co se najde:
    screenshot-regex101.com-2020.05.05-08_24_42

V. Jak najít text uprostřed, mezi prvním a druhým svislítkem?

  • třeba tak, že si rozdělíme text na části a použijeme tu prostřední část, ukázka zde, regulární výraz vypadá složitěji, ale je jen složený z více částí:
    ^(.*)\|\s*(.*?)\s*\|(.*)$
  • příklad co se najde:
    screenshot-regex101.com-2020.05.05-08_29_54

:question: Napadá vás ještě nějaká varianta, kterou chcete vyhledat? Napište ji v komentáři pod tímto příspěvkem.

Související témata na našem fóru:

1 Like
Funkce | Audit XML | Agentury | Nápověda | Blog | Forum | Kontakt