I'm trying to remove extra spaces from a long string which has some EOLs, using regex. It's not working. Here's a simple demo:
irb(main):004:0> a="\n abc\n a a a"
=> "\n abc\n a a a"
irb(main):005:0> a.gsub(/\s+/,' ')
=> " abc a a a"
I've dug around in my regex references, and all I can say is that is hasn't been the least bit helpful. I'm probably not looking for the right thing.
Can someone more knowledgeable tell me is there's a way to do this - remove extra spaces without removing the EOLs?
Thanks!
t.
···
--
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Tom Cloyd, MS MA, LMHC - Private practice Psychotherapist
Bellingham, Washington, U.S.A: (360) 920-1226
<< tc@tomcloyd.com >> (email)
<< TomCloyd.com >> (website) << sleightmind.wordpress.com >> (mental health weblog)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Alle Friday 06 February 2009, Tom Cloyd ha scritto:
I'm trying to remove extra spaces from a long string which has some
EOLs, using regex. It's not working. Here's a simple demo:
irb(main):004:0> a="\n abc\n a a a"
=> "\n abc\n a a a"
irb(main):005:0> a.gsub(/\s+/,' ')
=> " abc a a a"
I've dug around in my regex references, and all I can say is that is
hasn't been the least bit helpful. I'm probably not looking for the
right thing.
Can someone more knowledgeable tell me is there's a way to do this -
remove extra spaces without removing the EOLs?
Thanks!
t.
According to "The Ruby Programming Language", \s is equivalent to " \t\n\r\f".
So, if you want avoid removing newlines, you'll need to replace \s with
[ \t\r\f] or with a whitespace if you're only intersted in it:
a="\n abc\n a a a"
a.gsub(/ +/, ' ')
=>"\n abc\n a a a"
I hope this helps
Stefano
Tom,
If you're just speaking of the space character and you want to replace
double-spaces (or triple-spaces or more) with just a single space, you can
do this.
puts a.gsub(/ +/," ")
Joe
···
On Fri, Feb 6, 2009 at 1:10 PM, Tom Cloyd <tomcloyd@comcast.net> wrote:
I'm trying to remove extra spaces from a long string which has some EOLs,
using regex. It's not working. Here's a simple demo:
irb(main):004:0> a="\n abc\n a a a"
=> "\n abc\n a a a"
irb(main):005:0> a.gsub(/\s+/,' ')
=> " abc a a a"
I've dug around in my regex references, and all I can say is that is hasn't
been the least bit helpful. I'm probably not looking for the right thing.
Can someone more knowledgeable tell me is there's a way to do this - remove
extra spaces without removing the EOLs?
Thanks!
t.
--
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Tom Cloyd, MS MA, LMHC - Private practice Psychotherapist
Bellingham, Washington, U.S.A: (360) 920-1226
<< tc@tomcloyd.com >> (email)
<< TomCloyd.com >> (website) << sleightmind.wordpress.com >> (mental
health weblog)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
A newline is a whitespace char. \s is the same as [ \t\r\n\f]. If you
don't want to match them, remove them. Try
a.gsub(/[ \t]+/,' ')
--Mark
···
On Feb 6, 7:10 am, Tom Cloyd <tomcl...@comcast.net> wrote:
I'm trying to remove extra spaces from a long string which has some
EOLs, using regex. It's not working. Here's a simple demo:
irb(main):004:0> a="\n abc\n a a a"
=> "\n abc\n a a a"
irb(main):005:0> a.gsub(/\s+/,' ')
=> " abc a a a"
I've dug around in my regex references, and all I can say is that is
hasn't been the least bit helpful. I'm probably not looking for the
right thing.
Stefano, Joe - thank you! I'm only just getting into regex, so I get easily lost. You solved my problem - each in different ways. A lot of bang for the buck, indeed!
t.
joe chesak wrote:
···
Tom,
If you're just speaking of the space character and you want to replace
double-spaces (or triple-spaces or more) with just a single space, you can
do this.
puts a.gsub(/ +/," ")
Joe
On Fri, Feb 6, 2009 at 1:10 PM, Tom Cloyd <tomcloyd@comcast.net> wrote:
I'm trying to remove extra spaces from a long string which has some EOLs,
using regex. It's not working. Here's a simple demo:
irb(main):004:0> a="\n abc\n a a a"
=> "\n abc\n a a a"
irb(main):005:0> a.gsub(/\s+/,' ')
=> " abc a a a"
I've dug around in my regex references, and all I can say is that is hasn't
been the least bit helpful. I'm probably not looking for the right thing.
Can someone more knowledgeable tell me is there's a way to do this - remove
extra spaces without removing the EOLs?
Thanks!
t.
--
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Tom Cloyd, MS MA, LMHC - Private practice Psychotherapist
Bellingham, Washington, U.S.A: (360) 920-1226
<< tc@tomcloyd.com >> (email)
<< TomCloyd.com >> (website) << sleightmind.wordpress.com >> (mental
health weblog)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
--
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Tom Cloyd, MS MA, LMHC - Private practice Psychotherapist
Bellingham, Washington, U.S.A: (360) 920-1226
<< tc@tomcloyd.com >> (email)
<< TomCloyd.com >> (website) << sleightmind.wordpress.com >> (mental health weblog)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Can't you use squeeze?
Blog: http://random8.zenunit.com/
Learn rails: http://sensei.zenunit.com/
···
On 06/02/2009, at 11:24 PM, joe chesak <rubytalk@chesak.com> wrote:
Tom,
If you're just speaking of the space character and you want to replace
double-spaces (or triple-spaces or more) with just a single space, you can
do this.
puts a.gsub(/ +/," ")
Joe
On Fri, Feb 6, 2009 at 1:10 PM, Tom Cloyd <tomcloyd@comcast.net> > wrote:
I'm trying to remove extra spaces from a long string which has some EOLs,
using regex. It's not working. Here's a simple demo:
irb(main):004:0> a="\n abc\n a a a"
=> "\n abc\n a a a"
irb(main):005:0> a.gsub(/\s+/,' ')
=> " abc a a a"
I've dug around in my regex references, and all I can say is that is hasn't
been the least bit helpful. I'm probably not looking for the right thing.
Can someone more knowledgeable tell me is there's a way to do this - remove
extra spaces without removing the EOLs?
Thanks!
t.
--
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Tom Cloyd, MS MA, LMHC - Private practice Psychotherapist
Bellingham, Washington, U.S.A: (360) 920-1226
<< tc@tomcloyd.com >> (email)
<< TomCloyd.com >> (website) << sleightmind.wordpress.com >> (mental
health weblog)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Hi --
Stefano, Joe - thank you! I'm only just getting into regex, so I get easily lost. You solved my problem - each in different ways. A lot of bang for the buck, indeed!
Another variant:
a.gsub(/[^\S\n]+/, " ")
That character class means "all characters that are not a non-space or
\n." (The ^ is the "not" part.)
You might also be able to use squeeze:
p "abc def \n ghi\n".squeeze # "abc def \n ghi\n"
though that's going to be less versatile if you're dealing, say, with
tabs.
David
···
On Fri, 6 Feb 2009, Tom Cloyd wrote:
--
David A. Black / Ruby Power and Light, LLC
Ruby/Rails consulting & training: http://www.rubypal.com
Coming in 2009: The Well-Grounded Rubyist (http://manning.com/black2\)
http://www.wishsight.com => Independent, social wishlist management!
Best idea yet. Might as well use a built-in, rather than reinventing
one.
a.squeeze(" ")
Thanks for the reminder. I should review String#instance_methods every
once in a while. There's some good stuff there.
···
On Feb 6, 9:37 am, Julian Leviston <jul...@coretech.net.au> wrote:
Can't you use squeeze?
David A. Black wrote:
Hi --
Stefano, Joe - thank you! I'm only just getting into regex, so I get easily lost. You solved my problem - each in different ways. A lot of bang for the buck, indeed!
Another variant:
a.gsub(/[^\S\n]+/, " ")
That character class means "all characters that are not a non-space or
\n." (The ^ is the "not" part.)
You might also be able to use squeeze:
p "abc def \n ghi\n".squeeze # "abc def \n ghi\n"
though that's going to be less versatile if you're dealing, say, with
tabs.
David
Thanks, David. I continue to be amazed by the depth of your knowledge, and outright cleverness. In pursuing this simply problem I'm inadvertently learning a lot. I'm grateful. Thanks for your contribution that process!
t.
···
On Fri, 6 Feb 2009, Tom Cloyd wrote:
--
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Tom Cloyd, MS MA, LMHC - Private practice Psychotherapist
Bellingham, Washington, U.S.A: (360) 920-1226
<< tc@tomcloyd.com >> (email)
<< TomCloyd.com >> (website) << sleightmind.wordpress.com >> (mental health weblog)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
David A. Black wrote:
Hi --
(squeeze defaults to " " as its argument, so you don't have to provide
an argument unless it's something different.)
David
Is that a 1.9.1 change? In 1.8.6 String#squeeze squeezes everything if
no arguments are given.
"abc aabbcc ".squeeze
#=>"abc abc "
Siep
···
--
Posted via http://www.ruby-forum.com/\.
Sorry, forgot the " " argument
Blog: http://random8.zenunit.com/
Learn rails: http://sensei.zenunit.com/
···
On 07/02/2009, at 7:45 AM, "David A. Black" <dblack@rubypal.com> wrote:
Hi --
On Sat, 7 Feb 2009, Siep Korteling wrote:
David A. Black wrote:
Hi --
(squeeze defaults to " " as its argument, so you don't have to provide
an argument unless it's something different.)
David
Is that a 1.9.1 change? In 1.8.6 String#squeeze squeezes everything if
no arguments are given.
"abc aabbcc ".squeeze
#=>"abc abc "
Sorry, my mistake. It does squeeze everything.
David
--
David A. Black / Ruby Power and Light, LLC
Ruby/Rails consulting & training: http://www.rubypal.com
Coming in 2009: The Well-Grounded Rubyist (http://manning.com/black2\)
http://www.wishsight.com => Independent, social wishlist management!