2011-11-21 54 views
0

我試圖刪除以長字符串(即回覆電子郵件)中的字符'>'開始的任何行。刪除在rails字符串中以>開頭的行

在PHP中,我會用if語句迭代每行,在linux中我會嘗試使用sed或awk。

什麼是最優雅的鋼軌方法?

+1

我認爲你應該刪除標記sed和awk,除非sed/awk的解決方案也被你接受。 – Kent

回答

0

你的問題暗示輸入一個字符串,包含多行。 你是否希望輸出只是一個多行的字符串?我假設是的。

或者使用字符串和數組操作:

str.lines.reject{|x| x =~ /^>/}.join # this will return a new string, without those ">" lines 

或使用正則表達式:

str.gsub(/^>.+\n*/. '') 

更好的解決方案:

您將需要使用非貪婪的多線匹配模式爲您的正則表達式:?

str.gsub(/^>.*?$\n*/m, '') # by using gsub!() you can modify the string in place 

^>在一行

的開頭匹配您的「>」字符* $匹配的起始字符,直到行結束之後的任何字符(非貪婪)

\ n *換行字符本身匹配,如果任何(您想刪除以及)

「米」在正則表達式的結束表明多線路匹配,這將適用於RegExp用於字符串中的每一行。

+0

這似乎是失敗的最後一行我是否有任何理由,爲什麼這可能是這種情況?我使用'更好的解決方案' – cjm2671

+0

放置\ n *而不是\ n – Tilo

0

它應該像您期望:

your_string.lines.to_a.reject{|line| line[0] == '>'}.join 
+0

這不是雙重否定嗎?我認爲這將完全相反 - 但我可以修復它!謝謝! – cjm2671

+0

您的解決方案在輸出字符串中留下額外的「\ n」字符。 '.to_a'不需要。 'line [0] =='>''不是很優雅。 – 2011-11-21 23:33:32

+0

如果行必須以'>'開頭,這是最快的方法。 – Hauleth

2

你可以試試這個:

your_string.gsub(/^\>.+\n/,'') 
相關問題