String split drops the delimiter


#1

Hello:

string.split drops the delimiter. Thus:

data = " This is a declarative sentence. And is this a question? Yes! "
for sentence in data.split(/[.!?] /)
puts sentence
end

gives

This is a declarative sentence
And is this a question
Yes

I’d like the result to retain the delimiter, thus:

This is a declarative sentence.
And is this a question?
Yes!

Any easy way to do this?
Thanks!
basi


#2

Use ().

irb(main):001:0> s=“a,b,c,d”
=> “a,b,c,d”
irb(main):002:0> s.split(/(,)/)
=> [“a”, “,”, “b”, “,”, “c”, “,”, “d”]


#3

On Dec 5, 2005, at 2:12 PM, basi wrote:

gives

Any easy way to do this?

split() can be asked to include it, though it puts it in a separate
field:

data = " This is a declarative sentence. And is this a question?
Yes! "
=> " This is a declarative sentence. And is this a question? Yes! "

data.split(/([.!?])\s+/)
=> [" This is a declarative sentence", “.”, “And is this a question”,
“?”, “Yes”, “!”]

Hope that helps.

James Edward G. II


#4

basi wrote:

Hello:

string.split drops the delimiter. Thus:
I’d like the result to retain the delimiter, thus:

Any easy way to do this?

How about:

puts data.scan(/\S.*?[.!?]/)


#5

Hi,
This works for me.
Thanks much!
basi


#6

On 12/6/05, basi removed_email_address@domain.invalid wrote:

Hi,
This works for me.
Thanks much!
basi

anternatively

data = " This is a declarative sentence. And is this a question? Yes! "
data.gsub!(/(?<=[.?!])/, “\n”)

-> " This is a declarative sentence.\n And is this a question?\n

Yes!\n "


#7

Hi,
A bit of a problem trying to run your code:

irb(main):369:0> data
=> " This is a declarative sentence. And is this a question? Yes! "
irb(main):370:0> data.gsub!(/(?<=[.?!])/, “\n”)
SyntaxError: compile error
(irb):370: undefined (?..) sequence: /(?<=[.?!])/
from (irb):370
from c:/ruby/lib/ruby/1.8/drb/drb.rb:492
irb(main):371:0>

Also, let’s modify the data a bit, thus:

data = ’ “Is this a question?” he asked. “Yes!” she exclaimed.’

I’d like to get the sentences:

“Is this a question?” he asked.
“Yes!” she exclaimed.

Rather than below, which is what I’m getting now.

"Is this a question?
" he asked.
"Yes!
" she exclaimed.

Thanks!
basi


#8

On 12/6/05, basi removed_email_address@domain.invalid wrote:

irb(main):371:0>

Also, let’s modify the data a bit, thus:

data = ’ “Is this a question?” he asked. “Yes!” she exclaimed.’

I’d like to get the sentences:

“Is this a question?” he asked.
“Yes!” she exclaimed.

data.scan(/(?:"[^"]?"|[^.?!])[.?!]\s?/)
#=> [" “Is this a question?” he asked. ", ““Yes!” she exclaimed.”]


#9

Hi,
Thanks for supplying the last piece of “my” puzzle. It is much
appreciated.
basi