# A little regexp help for a newbie

**URL:** <https://www.ruby-forum.com/t/a-little-regexp-help-for-a-newbie/101318>\
**Category:** Ruby\
**Created:** [August 4, 2006, 7:22am UTC](https://www.ruby-forum.com/t/a-little-regexp-help-for-a-newbie/101318 "2006-08-04T07:22:52Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![RJ\_Melton](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/r/f08c70/32.png) [@RJ\_Melton](https://www.ruby-forum.com/u/RJ_Melton)\
**Post date:** [August 4, 2006, 7:22am UTC](https://www.ruby-forum.com/t/a-little-regexp-help-for-a-newbie/101318/1 "2006-08-04T07:22:52Z")

</div>

Sorry this is such an absurdly simple question, but I can’t find the  
answer  
after some googling, probably just me not knowing how to look.

Anyway, I have a simple string in the format 1a2+3 and want to basically  
take out the non-number bits and put the numbers into an array.  
It also has to match more than single-digit numbers. The rest is simple  
enough, but I’m just really new to regex and can’t make it work.  
Anyone feel like helping me out a little, or at least pointing me in the  
right direction? Thanks.

---

<div class="post-metadata">

**Author:** ![RJ\_Melton](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/r/f08c70/32.png) [@RJ\_Melton](https://www.ruby-forum.com/u/RJ_Melton)\
**Post date:** [August 4, 2006, 7:34am UTC](https://www.ruby-forum.com/t/a-little-regexp-help-for-a-newbie/101318/2 "2006-08-04T07:34:52Z")

</div>

On 8/4/06, RJ Melton [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> Anyway, I have a simple string in the format 1a2+3 and want to basically  
> take out the non-number bits and put the numbers into an array.  
> It also has to match more than single-digit numbers.

I’m pretty sure this is non-optimal, but you could use String.split:

“1a23+4-123”.split(/[^\d]/)

the argument to split is a regex that matches anything that’s not a  
digit ( \d is a digit; [^\d] is anything but that). split uses that  
argument to decide where to split the string up.

;D

---

<div class="post-metadata">

**Author:** ![RJ\_Melton](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/r/f08c70/32.png) [@RJ\_Melton](https://www.ruby-forum.com/u/RJ_Melton)\
**Post date:** [August 4, 2006, 7:40am UTC](https://www.ruby-forum.com/t/a-little-regexp-help-for-a-newbie/101318/3 "2006-08-04T07:40:54Z")

</div>

I tried that and it works fine, optimal or not. Thanks. 🙂

---

<div class="post-metadata">

**Author:** ![RJ\_Melton](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/r/f08c70/32.png) [@RJ\_Melton](https://www.ruby-forum.com/u/RJ_Melton)\
**Post date:** [August 4, 2006, 7:46am UTC](https://www.ruby-forum.com/t/a-little-regexp-help-for-a-newbie/101318/4 "2006-08-04T07:46:54Z")

</div>

What about “1a2+b”.scan(/\d+) ?  
It returns the numbers as array.

RJ Melton schrieb:

---

<div class="post-metadata">

**Author:** ![RJ\_Melton](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/r/f08c70/32.png) [@RJ\_Melton](https://www.ruby-forum.com/u/RJ_Melton)\
**Post date:** [August 4, 2006, 7:52am UTC](https://www.ruby-forum.com/t/a-little-regexp-help-for-a-newbie/101318/5 "2006-08-04T07:52:55Z")

</div>

On 8/4/06, Robert R. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> What about “1a2+b”.scan(/\d+) ?  
> It returns the numbers as array.

Muuuuch better!

---

<div class="post-metadata">

**Author:** ![RJ\_Melton](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/r/f08c70/32.png) [@RJ\_Melton](https://www.ruby-forum.com/u/RJ_Melton)\
**Post date:** [August 4, 2006, 7:55am UTC](https://www.ruby-forum.com/t/a-little-regexp-help-for-a-newbie/101318/6 "2006-08-04T07:55:56Z")

</div>

On 8/4/06, Daniel B. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> [http://danielbaird.com](http://danielbaird.com) (TiddlyW;nks! :: Whiteboard Koala :: Blog ::  
> Things That Suck)

Will this pick up negative numbers or floats?

---

<div class="post-metadata">

**Author:** ![RJ\_Melton](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/r/f08c70/32.png) [@RJ\_Melton](https://www.ruby-forum.com/u/RJ_Melton)\
**Post date:** [August 4, 2006, 8:01am UTC](https://www.ruby-forum.com/t/a-little-regexp-help-for-a-newbie/101318/7 "2006-08-04T08:01:56Z")

</div>

> > On 8/4/06, Robert R. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:
> > 
> > > What about “1a2+b”.scan(/\d+) ?  
> > > It returns the numbers as array.
> 
> Will this pick up negative numbers or floats?

Nope, only plain digits. if you want other stuff, you need to add it  
to the regex.  
/\d+/ …is just digits  
/[±]?\d+/ …optional + or -  
/[±]?\d+.?\d\*/ …optional + or -, and optional .

untested… (sorry, too lazy to test 🙂

---

<div class="post-metadata">

**Author:** ![RJ\_Melton](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/r/f08c70/32.png) [@RJ\_Melton](https://www.ruby-forum.com/u/RJ_Melton)\
**Post date:** [August 4, 2006, 4:15pm UTC](https://www.ruby-forum.com/t/a-little-regexp-help-for-a-newbie/101318/8 "2006-08-04T16:15:24Z")

</div>

p “-1.2 56 0.443 4.22E-12 000555”.scan(  
/(?:[±])?[0-9]+(?:[,.][0-9]+)?(?:E[±][1-9][0-9]\*)?/ )  
#=\> ["-1.2", “56”, “0.443”, “4.22E-12”, “000555”]

This looks okay for most purposes, in my opinion. 🙂  
You can google for “real number regex” et cetera…

Daniel B. schrieb:
