Ruby,正则表达式匹配标签并替换为2个空格?

AnA*_*ice 3 regex ruby-on-rails ruby-on-rails-3

有没有人在ruby中有正则表达式,可以匹配和替换2个空格的选项卡?

Jos*_*ber 11

不能简单:

str.gsub(/\t/, '  ')
Run Code Online (Sandbox Code Playgroud)

  • 如果字符串中有任何制表符,它们也会被替换,所以不是那么明显。您唯一感兴趣的选项卡是每行开头的选项卡。 (2认同)

Way*_*rad 7

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

# 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"
Run Code Online (Sandbox Code Playgroud)

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