2012-02-11 51 views

回答

21

lstrip似乎是你想要的(假設尾隨空白應保持):

>> s = "\naaaa\nbbbb" #=> "\naaaa\nbbbb" 
>> s.lstrip #=> "aaaa\nbbbb" 

從文檔:

返回海峽的副本是空白去除。另請參閱 String#rstrip和String#條。

http://ruby-doc.org/core-1.9.3/String.html#method-i-lstrip

+0

恥辱我:) ! – fl00r 2012-02-11 10:08:15

1

這應該適合你:s.strip

11

strip將刪除所有尾隨空白

s = "\naaaa\nbbbb" 
s.strip! 

小的黑客的Chomp前導空格:

str = "\nmy string" 
chomped_str = str.reverse.chomp.reverse 
+1

爲了澄清,'String#strip'和'String#strip!'刪除了*前導*和*後綴*空格。這就是爲什麼它在這種情況下工作。 – tadman 2012-02-11 08:40:59

+0

yeap'strip將刪除所有尾隨空格:)但我不知道他是否需要刪除只有領先的空白或全部。無論如何,沒有「chomp」的領先空白 – fl00r 2012-02-11 08:43:55

+5

@ fl00r但是'lstrip'只能去掉領先的空白區域:-)我發佈了一個答案。 – 2012-02-11 09:55:35

2

不知道這是最好的方式,但你可以嘗試:

s.reverse.chomp.reverse 

如果你想離開尾隨的換行符(如果存在)。

+0

注意:如果你將一個參數傳遞給'chomp',你也想反轉:'s.reverse.chomp(x.reverse).reverse' – 0xtobit 2018-01-25 21:38:37

6
s.sub(/^[\n\r]*/, '') 

這消除導致換行符(回車和換行,如在chomp),而不是任何空白。

+0

對於「字符串開始」,「\ A」或許比「開始行」的「^」更合適。但是上面的表達式仍然可以按照要求工作,因爲'sub'和星號一起確保它僅匹配第一行。 – 2014-01-26 20:37:15

7

所以,只是稍微澄清一下,有三種方法可以解決這個問題:sub,reverse.chomp.reverselstrip

我建議不要使用sub,因爲它的可讀性稍差,但也因爲它的工作原理:創建一個從舊字符串繼承的新字符串。另外你需要一個正則表達式來表達相當簡單的東西。

那麼你就下降到reverse.chomp.reverselstrip。最有可能的是,您希望lstrip因爲速度更快,但請記住strip的操作是而不是chomp的操作相同。 strip將刪除所有領先換行符空白:

"\n aaa\nbbb".reverse.chomp.reverse # => " aaa\nbbb" 
"\n aaa\nbbb".lstrip     # => "aaa\nbbb" 

如果你想確保你只刪除一個字符,那它絕對是一個換行符,使用reverse.chomp.reverse解決方案。如果您考慮所有主流換行符和空白垃圾,請使用lstrip

我可以想到使用正則表達式的一種情況是,如果您在開始時有一個未知數\r s和\n s,並且想要修剪它們,但不要觸及任何空格。你可以使用循環和更多的字符串方法來修剪,但它會更醜。性能影響並不重要。

+0

我想說,如果他只想刪除一個換行符,那麼他現在使用'sub!'(就地版本)的解決方案比'reverse.chomp.reverse'好很多。 – 2012-02-11 18:16:24

0

爲空白或者非空白字符做到這一點的方法是這樣的:

s = "\naaaa\nbbbb" 
s.slice!("\n") # returns "\n" but s also has the first newline removed. 
puts s # shows s has the first newline removed 
相關問題