Replace any multiple whitespaces with single white space

M

Michelle Pace

Hello, I need to make the first string below into the second string.
That is, only single white spaces are permitted.

"1/4 WELDING LEVER FRONT DRW 14844-C MAT WMA1CM-WLFRONT"
into
"1/4 WELDING LEVER FRONT DRW 14844-C MAT WMA1CM-WLFRONT"



I want to use the sub! method. Why does the below code not work? Is my
pattern incorrect?

descrip = "1/4 WELDING LEVER FRONT DRW 14844-C MAT WMA1CM-WLFRONT"
descrip.sub!(/\s+/,' ')
puts descrip



Thank-you in advance,
Michelle
 
J

Joel VanderWerf

Hello, I need to make the first string below into the second string.
That is, only single white spaces are permitted.

"1/4 WELDING LEVER FRONT DRW 14844-C MAT WMA1CM-WLFRONT"
into
"1/4 WELDING LEVER FRONT DRW 14844-C MAT WMA1CM-WLFRONT"



I want to use the sub! method. Why does the below code not work? Is my
pattern incorrect?

descrip = "1/4 WELDING LEVER FRONT DRW 14844-C MAT WMA1CM-WLFRONT"
descrip.sub!(/\s+/,' ')
puts descrip

sub! only affects the *first* match. You can substitute globally with
gsub. Also you might as well only match 2 or more spaces:

descrip.gsub!(/\s\s+/,' ')
 
J

John W Higgins

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

Good Morning Michelle,

Hello, I need to make the first string below into the second string.
That is, only single white spaces are permitted.

"1/4 WELDING LEVER FRONT DRW 14844-C MAT WMA1CM-WLFRONT"
into
"1/4 WELDING LEVER FRONT DRW 14844-C MAT WMA1CM-WLFRONT"



I want to use the sub! method. Why does the below code not work? Is my
pattern incorrect?

descrip = "1/4 WELDING LEVER FRONT DRW 14844-C MAT WMA1CM-WLFRONT"
descrip.sub!(/\s+/,' ')
puts descrip

Sub only replaces the first instance of the pattern. You require gsub! to
accomplish your task.

You noticed no difference with your sub! call because the first instance of
your pattern is the single space between 1/4 and WELDING so in essence sub!
did nothing to your string because it replaced a single space with a single
space.

John
 
J

Josh Cheek

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

sub! only affects the *first* match. You can substitute globally with gsub.
Also you might as well only match 2 or more spaces:

descrip.gsub!(/\s\s+/,' ')

I think the original regex is better, because leads to more consistent
results:

"hello\tworld !".gsub(/\s\s+/,' ') # => "hello\tworld !"
"hello\tworld !".gsub(/\s+/,' ') # => "hello world !"
 
J

Joel VanderWerf

I think the original regex is better, because leads to more consistent
results:

"hello\tworld !".gsub(/\s\s+/,' ') # => "hello\tworld !"
"hello\tworld !".gsub(/\s+/,' ') # => "hello world !"

Good point, but it depends on what you're trying to be consistent with.
Maybe the goal is to squeeze space, but preserve tab layout for readability.
 
G

Gunther Diemant

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

There is also the build-in method squeeze!, which does exacly this

str.squeeze!(" ")
 
A

Alexander McMillan

Try gsub for multiple characters - Try code below:=20
=20
descrip =3D "1/4 WELDING LEVER FRONT DRW 14844-C MAT WM=
A1CM-WLFRONT"
puts descrip.gsub!(/\s+/=2C' ') =
 
B

Brian Candler

Joel VanderWerf wrote in post #994935:
sub! only affects the *first* match. You can substitute globally with
gsub. Also you might as well only match 2 or more spaces:

descrip.gsub!(/\s\s+/,' ')

Those are not equivalent, because \s matches more than just ASCII 0x20.

d1 = "foo\tbar\tbaz"
d1.gsub(/\s+/,' ') # "foo bar baz"
d1.gsub(/\s\s+/,' ') # "foo\tbar\tbaz"
 
J

Joel VanderWerf

Joel VanderWerf wrote in post #994935:

Those are not equivalent, because \s matches more than just ASCII 0x20.

d1 = "foo\tbar\tbaz"
d1.gsub(/\s+/,' ') # "foo bar baz"
d1.gsub(/\s\s+/,' ') # "foo\tbar\tbaz"
 
J

Joel VanderWerf

Joel VanderWerf wrote in post #994935:

Those are not equivalent, because \s matches more than just ASCII 0x20.

d1 = "foo\tbar\tbaz"
d1.gsub(/\s+/,' ') # "foo bar baz"
d1.gsub(/\s\s+/,' ') # "foo\tbar\tbaz"

You're right. What I said in another post about preserving tabs isn't
what the original sub! call was doing anyway.

(sorry for the empty reply previously)
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
474,001
Messages
2,570,254
Members
46,850
Latest member
VMRKlaus8

Latest Threads

Top