# Regular Expression question

**URL:** <https://www.ruby-forum.com/t/regular-expression-question/161612>\
**Category:** Rails\
**Created:** [February 27, 2009, 8:47pm UTC](https://www.ruby-forum.com/t/regular-expression-question/161612 "2009-02-27T20:47:45Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![northband](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/n/ecae2f/32.png) [@northband](https://www.ruby-forum.com/u/northband)\
**Post date:** [February 27, 2009, 8:47pm UTC](https://www.ruby-forum.com/t/regular-expression-question/161612/1 "2009-02-27T20:47:45Z")

</div>

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?

Thanks!

---

<div class="post-metadata">

**Author:** ![northband](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/n/ecae2f/32.png) [@northband](https://www.ruby-forum.com/u/northband)\
**Post date:** [February 27, 2009, 10:15pm UTC](https://www.ruby-forum.com/t/regular-expression-question/161612/2 "2009-02-27T22:15:26Z")

</div>

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

Rob B. [http://agileconsultingllc.com](http://agileconsultingllc.com)  
removed\_email\_address@domain.invalid

---

<div class="post-metadata">

**Author:** ![northband](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/n/ecae2f/32.png) [@northband](https://www.ruby-forum.com/u/northband)\
**Post date:** [February 27, 2009, 10:38pm UTC](https://www.ruby-forum.com/t/regular-expression-question/161612/3 "2009-02-27T22:38:19Z")

</div>

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

Thanks!

On Feb 27, 4:14 pm, Rob B. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)

---

<div class="post-metadata">

**Author:** ![northband](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/n/ecae2f/32.png) [@northband](https://www.ruby-forum.com/u/northband)\
**Post date:** [February 28, 2009, 4:13pm UTC](https://www.ruby-forum.com/t/regular-expression-question/161612/4 "2009-02-28T16:13:15Z")

</div>

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

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

Pepe

---

<div class="post-metadata">

**Author:** ![northband](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/n/ecae2f/32.png) [@northband](https://www.ruby-forum.com/u/northband)\
**Post date:** [February 28, 2009, 5:49pm UTC](https://www.ruby-forum.com/t/regular-expression-question/161612/5 "2009-02-28T17:49:05Z")

</div>

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]/, ‘’)

Pepe

---

<div class="post-metadata">

**Author:** ![northband](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/n/ecae2f/32.png) [@northband](https://www.ruby-forum.com/u/northband)\
**Post date:** [February 28, 2009, 4:14pm UTC](https://www.ruby-forum.com/t/regular-expression-question/161612/6 "2009-02-28T16:14:26Z")

</div>

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

Pepe

---

<div class="post-metadata">

**Author:** ![northband](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/n/ecae2f/32.png) [@northband](https://www.ruby-forum.com/u/northband)\
**Post date:** [March 1, 2009, 5:51pm UTC](https://www.ruby-forum.com/t/regular-expression-question/161612/7 "2009-03-01T17:51:05Z")

</div>

Hi.

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.

Pepe

---

<div class="post-metadata">

**Author:** ![northband](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/n/ecae2f/32.png) [@northband](https://www.ruby-forum.com/u/northband)\
**Post date:** [March 1, 2009, 12:30am UTC](https://www.ruby-forum.com/t/regular-expression-question/161612/8 "2009-03-01T00:30:40Z")

</div>

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](http://en.wikipedia.org/wiki/Significant_figures))

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 J.
