gpt4 book ai didi

ruby - 将前导空格转换为 ruby​​ 中的制表符

转载 作者:数据小太阳 更新时间:2023-10-29 07:29:08 25 4
gpt4 key购买 nike

给定以下缩进文本:

  two spaces
four
six
non-leading spaces

我想将每 2 个前导空格转换为制表符,本质上是从软制表符转换为硬制表符。我正在寻找以下结果(使用“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")

我注意到 answer使用 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

最佳答案

在多行模式下使用 (?:^ {2})|\G {2} 有什么问题?

第一个匹配总是在行的开头,
然后\G 将在其旁边连续匹配,或者匹配
将失败。下一场比赛将始终是该行的开头.. 重复。

在 Perl 中它的 $str =~ s/(?:^ {2})|\G {2}/x/mg;$str =~ s/(? :^ {2})|\G {2}/\t/mg;

ruby http://ideone.com/oZ4Os

input.gsub!(/(?:^ {2})|\G {2}/m,"x")

编辑:当然可以分解 anchor 并进行交替
http://ideone.com/1oDOJ

input.gsub!(/(?:^|\G) {2}/m,"x")

关于ruby - 将前导空格转换为 ruby​​ 中的制表符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10610036/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com