[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

regex \s == \n???

Tom Cloyd

2/6/2009 12:11:00 PM

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)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


11 Answers

Stefano Crocco

2/6/2009 12:22:00 PM

0

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

joe chesak

2/6/2009 12:25:00 PM

0

[Note: parts of this message were removed to make it a legal post.]

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

2/6/2009 12:28:00 PM

0

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)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


David A. Black

2/6/2009 12:37:00 PM

0

Hi --

On Fri, 6 Feb 2009, Tom Cloyd wrote:

> 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

--
David A. Black / Ruby Power and Light, LLC
Ruby/Rails consulting & training: http://www.r...
Coming in 2009: The Well-Grounded Rubyist (http://manning....)

http://www.wis... => Independent, social wishlist management!

Mark Thomas

2/6/2009 12:43:00 PM

0

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.

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

Julian Leviston

2/6/2009 2:37:00 PM

0

Can't you use squeeze?

Blog: http://random8.ze...
Learn rails: http://sensei.ze...

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)
>> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>>
>>
>>

Mark Thomas

2/6/2009 6:22:00 PM

0

On Feb 6, 9:37 am, Julian Leviston <jul...@coretech.net.au> wrote:
> Can't you use squeeze?

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.

Siep Korteling

2/6/2009 8:29:00 PM

0

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

David A. Black

2/6/2009 8:46:00 PM

0

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.r...
Coming in 2009: The Well-Grounded Rubyist (http://manning....)

http://www.wis... => Independent, social wishlist management!

Tom Cloyd

2/6/2009 10:09:00 PM

0

David A. Black wrote:
> Hi --
>
> On Fri, 6 Feb 2009, Tom Cloyd wrote:
>
>> 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.

--

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
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)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~