Ako na regulárne výrazy v Mergade - III. diel

Na úvod ešte trochu teórie, ktorá sa do minulých dielov nezmestila. V regulárnych výrazoch je možné pracovať aj s negáciou, a to pomocou striešky na začiatku množiny znakov. Napríklad:
  • [^\d] zodpovedá jednému znaku, ktorý nie je číslica,
  • [^\s] zodpovedá jednému znaku, ktorý nie je medzera (nejde o biely znak).
Regulárny výraz [^\s]*$ tak bude hľadať akékoľvek znaky od konca reťazca po prvú medzeru (biely znak). Takto je možné nájsť napr. Posledné slovo alebo číslo v reťazci (pozri príklad, ku ktorému sme využili túto stránku).

EAN

EAN môže mnohokrát spôsobovať problémy pri zobrazovaní produktov vo vašom feede. Pozrieme sa teda na dva časté problémy s jeho využitím.

1. Hromadné odstránenie EAN kódov z popisku produktov

Pre odstránenie EANu z DESCRIPTION alebo napríklad CATEGORYTEXTU jednotlivých produktov potrebujeme využiť pravidlo s regulárnym výrazom, ktoré vyhľadá číselný reťazec s dĺžkou 8-13 znakov vrátane medzery za ním, a nahradí ho za "nič". Využijeme teda pravidlo typu nájsť a nahradiť, pričom v elemente CATEGORYTEXT budeme vyhľadávať nasledujúce regulárny výraz: \d{8,13}\s, a do poľa pre nahradenie nezadáme nič.
 
Toto pravidlo môžeme aplikovať na všetky produkty, nie je potreba robiť špeciálny výber - tam kde sa EAN v popisku produktu nenájde sa nič nestane a pravidlo sa neaplikuje.

2. Kontrola EANu

Chybná dĺžka EANu môže byť tiež častým zdrojom problémov napríklad pri exporte dát do Google Merchant. Pomocou regulárnych výrazov v Mergadu takú chybu ľahko odladíte.

Povedzme, že chcete vyhľadať všetky produkty, ktoré majú EAN zle - obsahujú iný počet znakov ako 8 alebo 12-14 (čo sú najčastejšie dĺžky EANu). Budeme teda vyhľadávať také produkty, ktoré v elemente EAN nemajú práve 8 alebo práve 12-14 znakov. Tu využijeme striešku z úvodu, prípadne v jednoduchom rozhraní Mergada príkaz "neobsahuje regulárny výraz": ^(\ d{8}|\d{12,14})$
  • Strieška a dolár označujú začiatok a koniec reťazca, v ktorom vyhľadávame (oproti predchádzajúcemu príkladu tentoraz EAN neobklopuje ďalší text).
  • \d vyhľadáva číslice - buď presne 8 ľubovoľných číslic (osmička v zloženej zátvorke) alebo (zvislou čiarou) presne 12 - 14 ľubovoľných číslic.

Odstránenie veľkosti z PRODUCTNAME

Niektoré porovnávače - napríklad Glami - požadujú, aby element PRODUCTNAME neobsahoval informáciu o veľkosti produktu, pretože pre ňu má špeciálny element PARAM. V prípade, že máte svoje produkty v e-shope takto pomenované, potrebujete časť názvu zmazať u veľkého množstva položiek. Ako na to?

Pomocou pravidlá nájsť a nahradiť budeme hľadať konkrétne regulárny výraz: veľkosť\s*[\ dSMLX]+ a nahrádzať za "nič".
 
Chceme totiž nájsť slovné spojenie veľkosti a písmená alebo čísla, ktoré danú veľkosť označuje, pričom medzi slovom "veľkosť" a hodnotou môže byť ľubovoľný počet medzier.
Poďme ale postupne a ukážme si, ako takýto zápis vytvoriť:
  1. veľkosť - hľadáme reťazec, v ktorom je slovo "veľkosť",
  2. hodnota veľkosti - vieme, že hodnoty označujeme písmenom (S, M, L, ...) a občas tiež kombináciou písmená a čísla (napr. 4XL). Preto použijeme zápis \d, ktorý vyhľadáva všetky čísla od 0 do 9, a následne vymenujeme všetky písmená, z ktorých aspoň jedno sa vo výraze nachádza (preto hranaté zátvorky),
  3. toto označenie môže byť kdekoľvek v reťazci, nepoužijeme teda značky pre začiatok alebo koniec reťazca,
  4. medzi slovom "veľkosť" a samotnou hodnotou môže byť medzera (alebo viac medzier) a alebo tiež nemusí (napr. veľkostXL, veľkosť XL), preto použijeme vyhľadávanie medzier pomocou výrazu \s, hviezdička potom hovorí, že sa tam má medzera vyskytovať 0 až nespočetnekrát,
  5. znamienko plus na konci reťazca určuje, že sa celý hľadaný výraz v hranatých zátvorkách vyskytuje v našom reťazci aspoň raz.

Snáď ste sa v záplave zátvoriek a striešok nestratili. Ak áno, neváhajte sa nám ozvať na fórum alebo e-mail, radi vám pomôžeme sa nájsť!

Pridať nový komentár