Regular Expression question

Hi -

I would like to use gsub() to strip decimals with trailing zeros from a string. My string looks like this:

It depends on how you make the string.

"19.0".sub(/\.?0+\z/,'') #=> "19" "482.600".sub(/\.?0+\z/,'') #=> "482.6"

If you replace \z with (\D|\z) and substitute '\1', it might work.
(You can try it out yourself.)


Rob Biedenharn

Awesome - this is a start - I'll take it from here.


string = '10.0' string.sub!(/\.\d+/, '')

This will replace in place (sub!) any dot (\.) followed by at least one number (\d+) with nothing ('').


Sorry, I didn't read your first posting fully. My solution will not work for the case of 482.600.


OK, got something working you might be able to use.

Just to make things more complicated:

s = '19.0 / 482.600 mm / 19.060 / 482.600 mm' s.gsub!(/(\.0?[^0])?0+/, '\1').gsub!(/\.[\s\n]/, '')


There appear to be some good solutions here, but I thought I'd jump in with a bit of non-Rails technical detail.

I'd double check with the source of this data - the zeros may be significant. (see Significant figures - Wikipedia)

The data given doesn't seem to match that (482.600 mm would be written as 19.0000"), but it doesn't hurt to verify...

--Matt Jones


I just tested the regexp against 19.0000 and it works, but I got a little problem with the [\s\n]I just solved:

s = '19.0000 / 482.600 mm / 19.060000 / 482.600 mm' s.gsub!(/(\.0?[^0])?0+/, '\1').gsub!(/\.([\s\n])/, '\1')

This produces: '19 / 482.6 mm / 19.06 / 482.6 mm'

The "insignificant" trailing zeros after are always trimmed after a decimal point.