2014-10-12 79 views
-1

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

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

我如何删除多个空格"\n"后?

+1

如果只有一个这样的字符,你不想删除它们吗? – sawa 2014-10-12 04:15:34

+0

@sawa 不,我不想这样做,因为实际上我的字符串不仅仅是这个,在multispace之后还有更多的字符串,也许是tab,但是我没有在问题中添加它,因为我不知道它是否是它是否需要,我只是问在第一次换行后是否有多个空格或制表符,它必须被删除。我不知道如果里面还有换行符,会发生什么。 – LuminaChen 2014-10-12 04:58:19

+0

但重要的是,这个问题已经回答=)。对于我的情况,我确信我可以找出如何做我想要的。 – LuminaChen 2014-10-12 05:03:16

回答

0

使用正则表达式(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" 
+0

哦,我明白了,这很好,我想进一步问一下,美元符号的含义是什么? – LuminaChen 2014-10-12 04:03:05

+1

如果你打算把'$'作为字符串的结尾,那么使用'gsub'有什么意义? – sawa 2014-10-12 04:24:14

+1

@sawa,啊。你是对的。 'sub'已经够了。谢谢你指出。相应地更新了答案。 – falsetru 2014-10-12 04:26:33

0

的问题是不明确的。以下是我承担,但其他的解释是可能的:

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

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

  • 否则将紧随最后一个非空白字符的第一个换行符后面的尾随空白字符去掉。

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

这一个来实现这些假设的方法:

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,但我走进一些细节的原因之一是显示你为什么有必要精确地陈述假设和要求。在实际应用中,当需求不明确时,灾难即将到来。

+1

问题不明确。如果它意味着如果有任何线路中断,那么这个答案可能会添加一个不需要的。 – sawa 2014-10-12 04:13:25

+0

@sawa,这也发生在我身上,所以我编辑了。在第一个换行符之前,我也担心可能的空白区域。 – 2014-10-12 04:30:51

+0

我想,我需要做很多事情。 – LuminaChen 2014-10-12 05:04:43