在ruby中将前导空格转换为制表符
给定以下缩进文本:在ruby中将前导空格转换为制表符,ruby,regex,Ruby,Regex,给定以下缩进文本: two spaces four six non-leading spaces 我想将每2个前导空格转换为一个制表符,基本上是从软制表符转换为硬制表符。我正在查找以下结果(使用“x”而不是“\t”): 在ruby中,最有效或最有说服力的方法是什么 到目前为止,我所做的似乎是有效的,但感觉不太对劲 input.gsub!(/^ {2}/,"x") res = [] input.split(/\n/).each do |line| while l
two spaces
four
six
non-leading spaces
我想将每2个前导空格转换为一个制表符,基本上是从软制表符转换为硬制表符。我正在查找以下结果(使用“x”而不是“\t”):
在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")
但我不知道如何在Ruby中模仿这种模式。就我所知:
rep = 1
while input =~ /^x* {2}/ && rep < 10
input.gsub!(/\G {2}/,"x")
rep += 1
end
puts input
rep=1
而input=~/^x*{2}/&&rep<10
input.gsub!(/\G{2}/,“x”)
rep+=1
结束
输入
您只需使用一个gsub即可:
str.gsub(/^( {2})+/) { |spaces| "\t" * (spaces.length / 2) }
在多行模式下使用
(?:^{2})|\G{2}
有什么问题
第一个匹配总是在行的开头,然后\G将在该匹配项旁边连续匹配,或匹配项
将失败。下一场比赛永远是队伍的开始。。重复 在Perl中,
$str=~s/(?:^{2})|\G{2}/x/mg
或$str=~s/(?:^{2})|\G{2}/\t/mg代码>
红宝石
编辑:当然,可以将锚定因素分解并放入备选方案中
谢谢非常简单,像红宝石<代码>输入.gsub!(/(?:^ |\G){2}/m,“x”)
非常简洁,解决了我关于如何使用的难题。谢谢!
rep = 1
while input =~ /^x* {2}/ && rep < 10
input.gsub!(/\G {2}/,"x")
rep += 1
end
puts input
str.gsub(/^( {2})+/) { |spaces| "\t" * (spaces.length / 2) }
input.gsub!(/(?:^ {2})|\G {2}/m,"x")
input.gsub!(/(?:^|\G) {2}/m,"x")