Удалите лишние пробелы, но оставьте один пробел в строке - PullRequest
0 голосов
/ 29 апреля 2018

Я хочу иметь возможность взять строку со словом 'WUB', расположенной в ней случайным образом, и удалить эти экземпляры, замененные пробелом.

Ex. "WUBWUBWUBWEWUBWUBAREWUBWUBWUBTHEWUBCHAMPIONSWUBWUBMYWUBFRIENDS"

превращается в ... МЫ ЧЕМПИОНЫ, МОИ ДРУЗЬЯ

Однако проблема в том, что я получаю это с дополнительным пробелом для каждого «WUB». Как я могу убрать лишний пробел и сохранить только один пробел?

def song_decoder(song)
  song.gsub!(/WUB/, " ")
  song.strip!
  print song
  return song
end

song_decoder("WUBWUBWUBWEWUBWUBAREWUBWUBWUBTHEWUBCHAMPIONSWUBWUBMYWUBFRIENDS")

# above is test case

Ответы [ 3 ]

0 голосов
/ 29 апреля 2018

Я только что нашел метод сжатия!

def song_decoder(song)
  song.gsub!(/WUB/, " ")
  song.strip!
  song.squeeze!(" ")
  print song
  return song
end

Это именно то, что мне нужно. Мои извенения.

0 голосов
/ 29 апреля 2018

Без регулярного выражения:

"WUBWUBWUBWEWUBWUBAREWUBWUBWUBTHEWUBCHAMPIONSWUBWUBMYWUBFRIENDS".
  split('WUB').reject(&:empty?).join(' ')
#⇒ "WE ARE THE CHAMPIONS MY FRIENDS"
0 голосов
/ 29 апреля 2018

/WUB/ получает все «WUB» в строке, поэтому, если есть несколько последовательных, у вас будет два пробела, и использование результата в строке просто удалит все пробелы, поэтому не будет что вы ожидаете.

Вы можете получить любой "WUB" в качестве группы и заменить его на ''. Поскольку этот конкретный результат оставляет вас только с начальным пробелом (первый символ), lstrip будет иметь дело с этим:

str = 'WUBWUBWUBWEWUBWUBAREWUBWUBWUBTHEWUBCHAMPIONSWUBWUBMYWUBFRIENDS'
p str.gsub(/(WUB)+/, ' ').lstrip
# "WE ARE THE CHAMPIONS MY FRIENDS"
...