2012-01-17 13 views
3

誰かが2つのスペースでタブとマッチして置き換えることができるルビーの正規表現を持っていますか?Ruby、regexでタブとマッチして2つのスペースに置き換えますか?

+1

これはコードベースでタブの代わりにスペースを使用しているようです。コミットフックスクリプトを使ってこれを行うと、悪影響を受ける可能性があることに注意してください。犯罪者のローカルリポジトリ/作業コピーは最新であると予想されますが、リモートリポジトリとの差分には変更が反映されます。この種の修正を行うのが最善です*コミットが成功した後*。 –

答えて

10

は簡単にできませんでした:

str.gsub(/\t/, ' ') 
+0

またはgsub!それを適所で行うこと。 – xaxxon

+0

文字列の中にタブがある場合、それらも置換されますので、それほど明白ではありません。興味のあるタブは、各行の先頭にあるものだけです。 – marines

6

あなたは、その後、(タブを交換するよりもわずかに異なるタスクである)タブを展開したい場合:

# This algorithm by Brian Candler ([email protected]) found on the 
# org.ruby-lang.ruby-talk mailing list 
# http://markmail.org/message/avdjw34ahxi447qk 
# Date: 2003-5-31 13:35:09 
# Subject: Re: expandtabs 

def expand_tabs(s, tab_stops = 8) 
    s.gsub(/([^\t\n]*)\t/) do 
    $1 + " " * (tab_stops - ($1.size % tab_stops)) 
    end 
end 

p expand_tabs("\tfoo", 2)  # => " foo" 
p expand_tabs(" \tfoo", 2)  # => " foo" 
p expand_tabs("\t\tfoo", 2) # => " foo" 

タブを拡張した理由は異なっていますたとえば、タブストップが8列ごとである場合、最初の列のタブは8スペースで置き換える必要がありますが、 1つは第2列に7つのスペース、第3列には1つ6桁分のmnなどです。

関連する問題