次のインデントされたテキストがあるとします。
two spaces
four
six
non-leading spaces
2つの先頭のスペースごとにタブに変換したいのですが、基本的にはソフトタブからハードタブに変換します。次の結果を探しています(「\ t」の代わりに「x」を使用):
xtwo spaces
xxfour
xxxsix
non-leading spaces
ルビーでこれを行うための最も効率的または雄弁な方法は何ですか?
私が今まで持っていたものは機能しているようですが、それは正しく感じられません。
input.gsub!(/^ {2}/,"x")
res = []
input.split(/\n/).each do |line|
while line =~ /^x+ {2}/
line.gsub!(/^(x+) {2}/,"\\1x")
end
res << line
end
puts res.join("\n")
sedと\Gを使用して答えに気づきました:
perl -pe '1 while s/\G {2}/\t/gc' input.txt >output.txt
しかし、Rubyでパターンを模倣する方法がわかりません。これは私が得た限りです:
rep = 1
while input =~ /^x* {2}/ && rep < 10
input.gsub!(/\G {2}/,"x")
rep += 1
end
puts input