From: Jeppe Jakobsen Date: 2006-02-13T06:59:22+09:00 Subject: Re: Scanning a string for decimal numbers ------=_Part_7952_10250622.1139781548246 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-Disposition: inline ok, but I think but wouldn't this regex do the same for me?: /[-+]?\d+\.?\d+/ Except that it will return an array containing my digit? 2006/2/12, Wilson Bilkovich : > > The scan process returns an array of arrays, so: > digits[0] is an Array containing '24.4'. > You could do: > digits.flatten! > just before digits[0], and get what you expect. > > > On 2/12/06, Jeppe Jakobsen wrote: > > Yes that worked, but I intend to convert the digits of my array to > floats, > > and I get a NoMethodError on to_f now when I do this: > > > > digits[0] =3D digits[0].to_f > > > > I don't understand that :-/ > > > > > > 2006/2/12, Wilson Bilkovich : > > > > > > Well, that's what I get for dashing off a quick e-mail before dinner. > > > The last problem Alexis mentioned is caused by the overly-specific > > > lookahead at the end. Here's a version that fixes that: > > > > > > irb(main):013:0> a =3D '24.5 + 24 + 24. + 24.4.' > > > =3D> "24.5 + 24 + 24. + 24.4." > > > irb(main):014:0> a.scan /[-+]?(\d+(?:\.\d+)?)(?=3D[^\d])/ > > > =3D> [["24.5"], ["24"], ["24"], ["24.4"]] > > > irb(main):015:0> > > > > > > One of the characters '-' or '+', optionally > > > Followed by at least one digit. > > > Followed by an optional group containing a period, and one or more > digits. > > > The capturing group ends when the next character is something other > > > than a digit. > > > > > > The (?:) mess is there so that '24.' doesn't end up with the period o= n > the > > > end. > > > > > > On 2/11/06, Jeppe Jakobsen wrote: > > > > Seems I accidently got my text marked as a qoute in my last mail, s= o > > > I'll > > > > just send it a again: > > > > > > > > Let me see if I got it right then. I'll like to use periods only fo= r > my > > > > decimal numbers. I also need normal integers so 24. being accepted > won't > > > > matter. Will this fix the problems you presented?: > > > > /[-+]?(\d+\.?\d*)(?=3D\s|$)/ > > > > > > > > > > > > I don't know if it takes care of the last problem, because I didn't > > > > understand it. > > > > > > > > > > > > 2006/2/12, Jeppe Jakobsen : > > > > > > > > > > 2006/2/12, Alexis Reigel : > > > > > > > > > > > > > > > > > > > > This should handle periods or commas as the separator. > > > > > > > > > > > > > > a =3D "24,4 + 55,2 + 55 - 44,0" > > > > > > > =3D> "24,4 + 55,2 + 55 - 44,0" > > > > > > > a.scan /(\d+,?.?\d*)(?=3D\s|$)/ > > > > > > > =3D> [["24,4"], ["55,2"], ["55"], ["44,0"]] > > > > > > > > > > > > > > > > > > > Some problems here: > > > > > > - signs are disregarded ("-24,4" becomes "24,4") > > > > > > - Invalid numbers are accepted: eg. "24,.4" "24,." "24." "24," > > > > > > - "." should be escaped. As you used it here, it means "any > > > character" > > > > > > (except newline), so many invalid numbers are accepted (e.g. > > > "24w"...) > > > > > > - If something different from whitespace follows the number, it > is > > > not > > > > > > or false accepted, e.g. "24.4." becomes "4." instead of "24.4" > > > > > > - ... > > > > > > > > > > > > > > > > > > Alexis. > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > -- > > "winners never quit, quitters never win" > > > > > > -- "winners never quit, quitters never win" ------=_Part_7952_10250622.1139781548246--