Format string for array question

I have a great deal of data that looks like the line below

"db file parallel write 8816 391 25.49"

The code to bring this into an array had a problem due to the spaces in the test
string "db file parallel write" I'd be happy to turn "db file parallel write" into
db_file_parallel_write (with underscores) first then just split the string, but all
of the regex I've tried so far has had negative effects on the rest of the string with the numbers.

···

------------------------------
Robert
rlkeller@yahoo.com

Robert Keller wrote:

I have a great deal of data that looks like the line below

"db file parallel write 8816 391 25.49"

The code to bring this into an array had a problem due to the spaces
in the test string "db file parallel write" I'd be happy to turn "db
file parallel write" into db_file_parallel_write (with underscores)
first then just split the string, but all of the regex I've tried so
far has had negative effects on the rest of the string with the
numbers.

------------------------------
Robert
rlkeller@yahoo.com

[rh-30-x86.irvspxl08:2182]gbystrit> irb
irb(main):001:0> s = "db file parallel write 8816 391 25.49"
=> "db file parallel write 8816 391 25.49"
irb(main):002:0> s.split(%r{(?:\s+)([\d.]+)}).reject {|s| s.empty?}
=> ["db file parallel write", "8816", "391", "25.49"]
irb(main):003:0>

=Gennady.

Why not match directly:

irb(main):002:0> s="db file parallel write 8816 391 25.49"
=> "db file parallel write 8816 391 25.49"
irb(main):003:0> m=s.match(/^(.+\b)\s+(\d+)\s+(\d+)\s+(\d+(?:\.\d+)?)$/)
=> #<MatchData:0x7ff807bc>
irb(main):004:0> (1..4).each {|i| p m[i]}
"db file parallel write"
"8816"
"391"
"25.49"
=> 1..4

Kind regards

robert

···

2007/10/22, Robert Keller <rlkeller@yahoo.com>:

I have a great deal of data that looks like the line below

"db file parallel write 8816 391 25.49"

The code to bring this into an array had a problem due to the spaces in the test
string "db file parallel write" I'd be happy to turn "db file parallel write" into
db_file_parallel_write (with underscores) first then just split the string, but all
of the regex I've tried so far has had negative effects on the rest of the string with the numbers.

Or you could use "zero-width positive lookahead" /(?=)/ with -? for
possible negative numbers:

s = "db file parallel -write 8816 391 -25.49"
p s.split(/\s+(?=-?\d)/)

#=> ["db file parallel -write", "8816", "391", "-25.49"]