Alex Antonov
Alex Antonov

Reputation: 15216

How can I replace consecutive whitespace with a single space from the whole string

I have a string with 2,3 or more spaces between non-space characters

string = "a  b c   d"

What can I do to make it like that:

output_string == "a b c d"

Upvotes: 12

Views: 5565

Answers (4)

Onorio Catenacci
Onorio Catenacci

Reputation: 15343

For what it's worth, you don't even need the regex:

iex(3)> "a b c    d" |> String.split |> Enum.join(" ")
#=>"a b c d"

Also just from my very little bit of smoke testing, it looks like this will work with any whitespace separators (i. e. it works on spaces and tabs as far as I can tell).

Upvotes: 6

Aleksei Matiushkin
Aleksei Matiushkin

Reputation: 121010

Another possibility would be to String#split and Enum#join:

iex(1)> "a  b c   d" |> String.split(~r{\s+}) |> Enum.join(" ")
#⇒ "a b c d"

Upvotes: 2

Erez Rabih
Erez Rabih

Reputation: 15788

Regex.replace(~r/\s+/, "a b c d", " ")

Upvotes: 0

Dogbert
Dogbert

Reputation: 222368

The simplest way would be using Regular Expressions:

iex(1)> string = "a  b c   d"
"a  b c   d"
iex(2)> String.replace(string, ~r/ +/, " ") # replace only consecutive space characters
"a b c d"
iex(3)> String.replace(string, ~r/\s+/, " ") # replace any consecutive whitespace
"a b c d"

Upvotes: 21

Related Questions