Forum: Ruby on Rails Regular Expression question

Announcement (2017-05-07): is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see and for other Rails- und Ruby-related community platforms.
northband (Guest)
on 2009-02-27 21:47
(Received via mailing list)
Hi -

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

I would like to end up with this:
19 " / 482.6 mm

Anyone have a regular expression that can do this?

Rob B. (Guest)
on 2009-02-27 23:15
(Received via mailing list)
On Feb 27, 2009, at 2:47 PM, northband wrote:

> --
> 19 " / 482.6 mm
> --
> Anyone have a regular expression that can do this?
> Thanks!
> >

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 B.
northband_101 (Guest)
on 2009-02-27 23:38
(Received via mailing list)
Awesome - this is a start - I'll take it from here.


On Feb 27, 4:14 pm, Rob B. <removed_email_address@domain.invalid>
pepe (Guest)
on 2009-02-28 17:13
(Received via mailing list)
string = '10.0'
string.sub!(/\.\d+/, '')

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

pepe (Guest)
on 2009-02-28 17:14
(Received via mailing list)
Sorry, I didn't read your first posting fully. My solution will not
work for the case of 482.600.

pepe (Guest)
on 2009-02-28 18:49
(Received via mailing list)
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]/, '')

Matt J. (Guest)
on 2009-03-01 01:30
(Received via mailing list)
There appear to be some good solutions here, but I thought I'd jump
with a bit of non-Rails technical detail.

I'd double check with the source of this data - the zeros may be

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

--Matt J.
pepe (Guest)
on 2009-03-01 18:51
(Received via mailing list)

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.

This topic is locked and can not be replied to.