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