2014-10-12 68 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