删除在ruby中的单词之后出现的所有空白

时间:2018-08-07 22:11:39

标签: ruby regex string

我有一个字符串“ hello world!怎么样?”

我需要的输出是“ helloworld!Howisitgoing?”

因此,您好在问候之后的所有空白都应删除。我正在尝试使用正则表达式在红宝石中做到这一点。

我尝试了strip和delete('')方法,但没有得到想要的东西。

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

请帮助。预先感谢!

2 个答案:

答案 0 :(得分:3)

有许多方法可以在没有正则表达式的情况下完成,但是使用它们可能是不带子字符串的“最干净”外观的方法,等等。我相信您正在寻找的正则表达式是{{1} }。

/(?!^)(\s)/

" hello world! How is it going?".gsub(/(?!^)(\s)/, '') #=> " helloworld!Howisitgoing?" 与任何空格字符(包括制表符等)匹配,而\s是一个“锚”,表示字符串的开头。 ^表示拒绝符合以下条件的比赛。结合使用它们可以实现您的目标。

如果您不熟悉gsub,则它与!非常相似,但是使用正则表达式。此外,它还有一个replace对应部分,可以在适当的位置更改字符串,而无需创建新的更改副本。

请注意,严格来说,这不是所有在单词后面的空格都可以引用确切的问题,但是我从您的示例中收集到,您的意图是“除字符串开头之外的所有空格”,这将实现。 / p>

答案 1 :(得分:1)

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?"