Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Ruby,正则表达式匹配制表符并替换为2个空格?_Ruby On Rails_Regex_Ruby On Rails 3 - Fatal编程技术网

Ruby on rails Ruby,正则表达式匹配制表符并替换为2个空格?

Ruby on rails Ruby,正则表达式匹配制表符并替换为2个空格?,ruby-on-rails,regex,ruby-on-rails-3,Ruby On Rails,Regex,Ruby On Rails 3,有没有人在ruby中有一个正则表达式可以匹配并用两个空格替换一个制表符?再简单不过了: str.gsub(/\t/, ' ') 如果要展开选项卡(这与替换选项卡略有不同),则: 展开选项卡不同于仅替换选项卡的原因是,选项卡可以表示不同数量的字符,具体取决于它出现在哪个列中。例如,如果制表位为每8列一个,则第一列中的制表位应替换为8个空格,但第二列中的一个制表位应替换为7个空格,第三列中的一个制表位应替换为6个空格,依此类推。这听起来像是在对代码库(空格而不是制表位)实施一些格式标准。请注意,

有没有人在ruby中有一个正则表达式可以匹配并用两个空格替换一个制表符?

再简单不过了:

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

如果要展开选项卡(这与替换选项卡略有不同),则:


展开选项卡不同于仅替换选项卡的原因是,选项卡可以表示不同数量的字符,具体取决于它出现在哪个列中。例如,如果制表位为每8列一个,则第一列中的制表位应替换为8个空格,但第二列中的一个制表位应替换为7个空格,第三列中的一个制表位应替换为6个空格,依此类推。

这听起来像是在对代码库(空格而不是制表位)实施一些格式标准。请注意,通过某些提交钩子脚本执行此操作可能会产生负面后果。本地存储库/工作副本预计是最新的,但与远程存储库的差异将显示更改。最好在提交成功后进行此类更正。如果字符串中有任何制表符,它们也将被替换,因此不太明显。您感兴趣的唯一选项卡是每行开头的选项卡。
# This algorithm by Brian Candler (B.Candler@pobox.com) 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"