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 K. wrote:

numbers.


Robert
[email protected]

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

2007/10/22, Robert K. [email protected]:

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.

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

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”]