给定以下缩进文本:
two spaces
four
six
non-leading spaces
我希望将每两个前导空格转换为制表符,从软制表符转换为硬制表符。 我要求的结果如下所示(使用'x'代替“\t”):
xtwo spaces
xxfour
xxxsix
non-leading spaces
在Ruby中,最高效或最简洁的方法是什么?
到目前为止,我所做的似乎是有效的,但感觉不太对。
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
input.gsub!(/(?:^|\G) {2}/m,"x")
非常简洁,解决了我如何使用\G的疑惑。谢谢! - DonovanChan