Hello Folks with a question I would like someone can clarify me:
When I type the following code:
"Substring1 Substring2 Substring3".each( '\s*' ) { | substring |
puts "[" + substring +"]"
}
What I got is:
[Substring1 ]
[Substring2 ]
[Substring3]
However when I type:
"Substring1 Substring2 Substring3".each( '\s*' ) { | substring |
puts "[" + substring +"]"
}
What I got is:
[Substring1 Substring2 Substring3]
Why the difference in outputs?
I verified in the "Programming Ruby 2nd (Dave Thomas - 2005)"
and it says that the ' ' is just one of the White Characters
that '\s' may represent ( the other ones are TAB and NEW LINE)
Any help would be very appreciated.
···
--
Posted via http://www.ruby-forum.com/.
Hi,
At Mon, 6 Aug 2007 08:43:07 +0900,
Carlos Ortega wrote in [ruby-talk:263437]:
When I type the following code:
"Substring1 Substring2 Substring3".each( '\s*' ) { | substring |
puts "[" + substring +"]"
}
What differs?
···
However when I type:
"Substring1 Substring2 Substring3".each( '\s*' ) { | substring |
puts "[" + substring +"]"
}
--
Nobu Nakada
In ruby, if you want something to be interpreted as a regular expression,
you must declare it as a regular expression. Hence /\s*/ would be
correct. Except that each() only accepts strings, so you can't use a
regular expression with it.
Use
"Substring1 Substring2 Substring3".split(/\s+/).each{|x| puts x}
instead
···
On Mon, 06 Aug 2007 08:43:07 +0900, Carlos Ortega wrote:
"Substring1 Substring2 Substring3".each( '\s*' ) { | substring |
puts "[" + substring +"]"
}
--
Ken Bloom. PhD candidate. Linguistic Cognition Laboratory.
Department of Computer Science. Illinois Institute of Technology.
http://www.iit.edu/~kbloom1/
On Behalf Of Carlos Ortega:
# and it says that the ' ' is just one of the White Characters
# that '\s' may represent ( the other ones are TAB and NEW LINE)
careful with "" vs ''
irb(main):020:0> puts "\s"
=> nil
irb(main):021:0> puts '\s'
\s
=> nil
irb(main):022:0>
irb(main):023:0* p "\s"
" "
=> nil
irb(main):024:0> p '\s'
"\\s"
=> nil
careful with "\s" vs /\s/ vs '\s'
irb(main):013:0> " \t\n*\n".split("\s*")
=> [" \t\n*\n"]
irb(main):014:0> " \t\n *\n".split("\s*")
=> [" \t\n", "\n"]
irb(main):015:0> " \t\n *\n".split("\s")
=> ["*"]
irb(main):016:0> " \t\n *\n".split(/\s*/)
=> ["", "*"]
irb(main):017:0> " \t\n *\n".split(/\s/)
=> ["", "", "", "", "*"]
irb(main):018:0> " \t\n *\n".split(/\s+/)
=> ["", "*"]
irb(main):019:0> " \t\n *\n".split('\s*')
=> [" \t\n *\n"]
irb(main):020:0> " \t\n *\n".split('\s')
=> [" \t\n *\n"]
irb(main):043:0> "Substring1\t\n Substring2\tSubstring3".each( "\s" ) { | substring |
irb(main):044:1* puts "[" + substring +"]"
irb(main):045:1> }
[Substring1
]
[Substring2 Substring3]
read on string.each, string.split, string.scan
try,
$> qri string.each string.split string.scan
btw, your 2 sample codes do not differ but on your believed output
it might be better if you cutnpaste actual code run.
kind regards -botp