【问题标题】:Removing multiple spaces following line break换行后删除多个空格
【发布时间】:2014-10-12 13:30:12
【问题描述】:

我想删除换行符后的多个空格和制表符,保留换行符。示例字符串:

str = "This is a really good morning\n             "

如何去掉"\n"后面的多个空格?

【问题讨论】:

  • 如果只有一个这样的字符,您不想删除它们吗?
  • @sawa 不,我不想要,因为实际上我的字符串不仅如此,在多空间之后还有更多的字符串,也许还有制表符,但我没有在问题中添加它,因为我不知道是否需要,我只是问在第一个换行符之后是否有多个空格或制表符,必须将其删除。我不知道如果里面也有换行符会发生什么。
  • 但重要的是,这个问题已经回答了=)。就我而言,我确信我可以找到我想做的事情。

标签: ruby string removing-whitespace


【解决方案1】:

使用正则表达式(String#sub):

str = "This is a really good morning\n             "
str.sub(/[ \t]+\z/, '')  # `[ \t]+\z` matches spaces, tabs at the end of the string.
# => "This is a really good morning\n"

如果您只想删除 多个空格(2 个或更多):

str.sub(/[ \t]{2,}\z/, '')
# => "This is a really good morning\n"

【讨论】:

  • 哦,我明白了,效果很好,我想进一步问一下,美元符号的含义是什么?
  • 如果您打算将$ 用作字符串的结尾,那么使用gsub 有什么意义?
  • @sawa,啊。你是对的。 sub 够了。谢谢你指出。相应地更新了答案。
  • @LuminaChen,编辑之前的评论:$ 匹配行尾(而不是字符串末尾)。 \z 匹配字符串的末尾。见Regular expression - Anchors - rubydoc
  • @sawa,我在 Ruby 正则表达式中误解了 $。谢谢你给我改正的机会。
【解决方案2】:

问题不清楚。这是我的假设,尽管其他解释是可能的:

  • 如果最后一个非空白字符是字符串的最后一个字符,则返回字符串;

  • 否则,如果最后一个非空白字符后面的空白不包含换行符(“\n”),则去除尾随空白;

  • else 去除最后一个非空白字符之后的第一个换行符之后的尾随空白。

这些假设的一个结果是任何后跟非空白字符的换行符都被视为与非空白字符相同。

这是实现这些假设的一种方式:

def strip_it(str)
  len = str.strip.size
  i = str[len..-1].index("\n")
  i ? str[0,len+i+1] : str.rstrip
end

一些例子:

strip_it "This is a really good morning\n             "
  #=> "This is a really good morning\n"

strip_it "This is a really good morning \n             "
  #=> "This is a really good morning \n"

strip_it "This is a really good morning"
  #=> "This is a really good morning"

strip_it "This is a really good morning\n    cat      "
  #=> "This is a really good morning\n    cat"

strip_it "This is a really good morning\n    cat\n     "
  #=> "This is a really good morning\n    cat\n"

strip_it "This is a really good morning\n    cat \n     "
  #=> "This is a really good morning\n    cat \n"

strip_it "This is a really good morning\n    cat \n dog \n  "
  #=> "This is a really good morning\n    cat \n dog \n"

Lumina,它可能看起来像 I'm dancing on the head of a pin,但我详细介绍的原因之一是向您展示为什么在陈述假设和要求时必须精确。在实际应用中,当需求不明确时,灾难就在等待。

【讨论】:

  • 问题不清楚。如果它意味着如果有任何换行符,那么这个答案可能会添加一个不需要的。
  • @sawa,我也想到了,所以我编辑了。我还担心第一个换行符之前可能存在空白。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多