Portál AbcLinuxu, 12. května 2024 08:24


Dotaz: Regularni vyraz - (ne)resitelny problem ?

19.6.2006 16:03 amnesiac
Regularni vyraz - (ne)resitelny problem ?
Přečteno: 76×
Odpovědět | Admin
V shellove promenne mam ulozeny retezec a obsahuje hodnoty oddeleny mezerama. Kazda hodnota ma nasledujici format:

<jmeno>-<parametr>
Jmeno muze obsahovat pomlcky ('-') a parametr jenom alfanumericky znaky.

Napr. promenna MYSTR="jedna-dva-1.2 jedna-1 dva-tri-ctryri-234x". Jak by mel vypadat spravnej vzorek RE pro hodnotu "jedna-1" ?

Zkousel jsem "jedna-[^- ]*", ale to mi vrati "jedna-dva". Pro porovnani zacatku a konce znam '^' a '$', ale jak omezit hledani uprostred ?

Jo a jeste muzu pouzit jenom zakladni reg. vyrazy.

Predem diky.

Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

19.6.2006 16:16 Kníže Ignor | skóre: 19 | blog: stoupa
Rozbalit Rozbalit vše Re: Regularni vyraz - (ne)resitelny problem ?
Odpovědět | | Sbalit | Link | Blokovat | Admin
Parametr jenom z alfanumerických znaků? to znamená, že jedna-dva-1.2 a dva-tri-ctyri-234x nemá parametr? Zpřesni zadání, problém by to neměl být

(^jedna-[0-9]+ | \sjedna-[0-9]+), pokud je parametr povinný a máš v zadání chybu

= rozlišuju případ, kdy je řetězec na začátku nebo uvnitř, tak se vyhnu tomu, že mi bude vyhovovat např. nulajedna-1
Jestli máš zálohu mého blogu, tak mi ji pošli. Nějak jsem si ho smazal :-)
19.6.2006 16:23 Kníže Ignor | skóre: 19 | blog: stoupa
Rozbalit Rozbalit vše Re: Regularni vyraz - (ne)resitelny problem ?
jinak, pokud to není nějakej školní příklad, tak já bych si ten řetězec upravil do " $retezec ", takže bych pak mohl předpokládat, že každá "hodnota" je obalena z obou stran mezerou a reg. výraz

\sjedna(-[0-9]+)*\s by bral i "hodnoty" bez parametru
Jestli máš zálohu mého blogu, tak mi ji pošli. Nějak jsem si ho smazal :-)
19.6.2006 16:26 Kníže Ignor | skóre: 19 | blog: stoupa
Rozbalit Rozbalit vše Re: Regularni vyraz - (ne)resitelny problem ?
místo té hvězdičky ovšem spíš něco jako {0,1}
Jestli máš zálohu mého blogu, tak mi ji pošli. Nějak jsem si ho smazal :-)
19.6.2006 16:38 amnesiac
Rozbalit Rozbalit vše Re: Regularni vyraz - (ne)resitelny problem ?
Sorry, alfanumerické znaky a tecka.

Nevim proc, ale ani po uprave mi to stejne nefunguje.

echo $XXX
jedna-dva-12 jedna-1 dva-tri-ctyri-234

[[ "$XXX" =~ "(^jedna-[0-9.]+ | \sjedna-[0-9.]+)" ]] && echo $BASH_REMATCH
(nic se nenalezne)
19.6.2006 16:40 amnesiac
Rozbalit Rozbalit vše Re: Regularni vyraz - (ne)resitelny problem ?
oprava:
[[ "$XXX" =~ "(^jedna-[0-9]+ | \sjedna-[0-9]+)" ]] && echo $BASH_REMATCH
19.6.2006 16:46 Kníže Ignor | skóre: 19 | blog: stoupa
Rozbalit Rozbalit vše Re: Regularni vyraz - (ne)resitelny problem ?
zapomněl jsem na vnitřní závorky, myslel jsem to takhle :

(^jedna-[0-9]+) | (\sjedna-[0-9]+)

ale stejně mi to nějak nefuguje
Jestli máš zálohu mého blogu, tak mi ji pošli. Nějak jsem si ho smazal :-)
19.6.2006 17:12 Kníže Ignor | skóre: 19 | blog: stoupa
Rozbalit Rozbalit vše Re: Regularni vyraz - (ne)resitelny problem ?
první pozorování - grep nezná \s, musí se použít [[:space:]]

druhé pozorování - ořítko se neznačí "|" ale v manuálu je "|;"

vzdávám to, nějak mi to nejde
Jestli máš zálohu mého blogu, tak mi ji pošli. Nějak jsem si ho smazal :-)
19.6.2006 17:32 amnesiac
Rozbalit Rozbalit vše Re: Regularni vyraz - (ne)resitelny problem ?
Dik za snahu.
Nakonec jsem to obesel takhle:

[[ $XXX =~ "(jedna-[0-9A-Za-z\.]*)(\ |$).*$" ]] && echo ${BASH_REMATCH[1]}
19.6.2006 16:23 happy barney | skóre: 34 | blog: dont_worry_be_happy
Rozbalit Rozbalit vše Re: Regularni vyraz - (ne)resitelny problem ?
Odpovědět | | Sbalit | Link | Blokovat | Admin
/(.+)-([^-]+)$/
19.6.2006 16:26 happy barney | skóre: 34 | blog: dont_worry_be_happy
Rozbalit Rozbalit vše Re: Regularni vyraz - (ne)resitelny problem ?
btw, ak je oddelovacom len posledny znak -, tak je jednoduchsie najst ju pomocou rindex a zobrat retazec pred a po tejto pozicii
19.6.2006 16:34 Kníže Ignor | skóre: 19 | blog: stoupa
Rozbalit Rozbalit vše Re: Regularni vyraz - (ne)resitelny problem ?
ze zadání jsem měl dojem, že "jméno" známe, tohle řeší něco jiného, navíc, co tam dělá ten dolar?
Jestli máš zálohu mého blogu, tak mi ji pošli. Nějak jsem si ho smazal :-)
19.6.2006 17:06 happy barney | skóre: 34 | blog: dont_worry_be_happy
Rozbalit Rozbalit vše Re: Regularni vyraz - (ne)resitelny problem ?
$ je koniec retazca.
19.6.2006 17:09 Kníže Ignor | skóre: 19 | blog: stoupa
Rozbalit Rozbalit vše Re: Regularni vyraz - (ne)resitelny problem ?
to vím, ale proč tam je?

v retezci "neco-1 jineho-2" chceme najit i jmeno "neco"
Jestli máš zálohu mého blogu, tak mi ji pošli. Nějak jsem si ho smazal :-)
19.6.2006 18:17 Jan Martinek | skóre: 43 | blog: johny | Brno
Rozbalit Rozbalit vše Re: Regularni vyraz - (ne)resitelny problem ?
Odpovědět | | Sbalit | Link | Blokovat | Admin
Vůbec si mě nevšímejte ;-)
>>> MYSTR="jedna-dva-1.2 jedna-1 dva-tri-ctryri-234x"
>>> dict([x.rsplit('-', 1) for x in MYSTR.split()])
{'dva-tri-ctryri': '234x', 'jedna-dva': '1.2', 'jedna': '1'}

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.