Regularni vyrazy
Pavel Smerk
xsmerk na informatics.muni.cz
Pátek Říjen 11 18:52:25 MEST 2002
On Fri, Oct 11, 2002 at 06:35:52PM +0200, Tomáš Vondra wrote:
> PS> Ja asi nechapu, co to znamena normalizovat? A co ma delat to nahrazeni? To u
> PS> z cisla 133.223,33456 udela 133,223, to je cilem?
>
> No, asi jsem se nevzjadril uplne jasne, a v tom vyrazu je preklep.
> Spravne tam ma byt
>
> $cislo =~ s/([1-9][0-9][0-9])\.([0-9][0-9][0-9]),([0-9])*/$1$2,$3/;
>
> PS> Nejedna se snad nakonec o $cislo =~ s/\.//g ?
>
> Ne, to se nejedna. Cely problem ktery resim je nasledujici: mam text,
> ve kterem mam najit cisla a prevest je do jakehosi "normalizovaneho
> tvaru", tj. pouze cislice a pripadne desetinna carka (ci tecka, dle
> vyberu). Priklad: 12.223,3349 -> 12223,3349
>
> Ja cisla ve tvaru 14.000.444 obecne umim najit, a to napriklad pomoci
> regularniho vyrazu
>
> [0-9]([0-9])?(\.([0-9][0-9][0-9]))*(,[0-9]+)*
>
> ktery by mi mel najit cisla vyse uvedeneho tvaru s nepovinnou
> desetinnou casti. (Ten vyraz nepokryva cele spektrum tech cisel, ale
> to je v tuto chvili nepodstatne).
>
> Pritom ale ta cast (\.([0-9][0-9][0-9])) se tam muze opakovat
> nekolikrat (a predem nevim kolikrat), ale ja pritom potrebuji to cislo
> nahradit normalizovanym tvarem, tj. neco jako
>
> $cislo = 12.223,3349;
> $cislo =~ s/([1-9][0-9][0-9])\.([0-9][0-9][0-9]),([0-9])*/$1,$2/;
>
> # ted $cislo = 12223,3349
>
> Jenomze tohle funguje jenom pokud vim ze ty casti jsou dve. A me by
> zajimalo, jestli lze nejak zapsat pomoci regularniho vyrazu.
Ja tomu porad nerozumim - cim se to lisi od vyhozeni vsech tecek?
$ perl -e '$cislo = "12.223,3349"; $cislo =~ s/\.//g; print "$cislo\n"'
12223,3349
Nebo to jako ma byt v nejakem textu okolo?
$ perl -e '
$text = "x 12.223,3349 x";
$text =~ s|([0-9]([0-9])?(\.([0-9][0-9][0-9]))*(,[0-9]+)*)|$a = $1; $a =~ s/\.//g; $a|eg;
print "$text\n"
'
x 12223,3349 x
(to ale predpokladam, ze asi ne, protoze takovou zasadni podminku byste snad
rekl rovnou v prvnim mailu)
Fakt nechapu problem.
P.
Další informace o konferenci Perl