删除 ruby 中单词后面出现的所有空格



我有一个字符串" 你好世界!进展如何?

我需要的输出是" helloworld!怎么回事?

因此,应该删除hello之后的所有空格。我正在尝试使用正则表达式在红宝石中执行此操作。

我尝试了剥离和删除(''(方法,但我没有得到我想要的。

some_string = "  hello world! How is it going?"
some_string.delete(' ') #deletes all spaces
some_string.strip #removes trailing and leading spaces only

请帮忙。提前感谢!

有很多方法可以在没有正则表达式的情况下完成此操作,但是使用它们可能是"最干净"的方法,而无需使用子字符串等。我相信您正在寻找的正则表达式是 /(?!^)(s)/

"  hello world! How is it going?".gsub(/(?!^)(s)/, '')
#=> " helloworld!Howisitgoing?"

s匹配任何空格字符(包括制表符等(,^是一个"锚点",表示字符串的开头。!指示拒绝具有以下条件的匹配项。将这些结合起来来实现您的目标可以实现。

如果你不熟悉gsub,它与replace非常相似,但采用正则表达式。它还具有一个gsub!对应部分,可以在不创建新的更改副本的情况下就地更改字符串。

请注意,严格来说,引用确切的问题并不是"单词之后"的所有空格,但我从您的示例中收集到您的意图是"除字符串开头之外的所有空格",这将这样做。

def remove_spaces_after_word(str, word)
  i = str.index(/b#{word}b/i)
  return str if i.nil?
  i += word.size
  str.gsub(/ /) { Regexp.last_match.begin(0) >= i ? '' : ' ' }
end
remove_spaces_after_word("Hey hello world! How is it going?", "hello")
  #=> "Hey helloworld!Howisitgoing?"

最新更新