Ruby, регулярное выражение для сопоставления табуляции и замены на 2 пробела? - PullRequest
3 голосов
/ 17 января 2012

Есть ли у кого-нибудь регулярное выражение в ruby, которое может сопоставить и заменить вкладку двумя пробелами?

Ответы [ 2 ]

11 голосов
/ 17 января 2012

Не может быть проще:

str.gsub(/\t/, '  ')
7 голосов
/ 17 января 2012

Если вы хотите развернуть вкладки (что немного отличается от замены вкладок), то:

# 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"

Причина, по которой вкладки расширяются, отличается от простой их замены в том, что вкладка может представлять другуюколичество символов в зависимости от того, в каком столбце он отображается. Например, если табуляция состоит из каждых 8 столбцов, то табуляция в первом столбце должна быть заменена на 8 пробелов, а одна во втором столбце на 7 пробелов, одна натретий столбец с 6 пробелами и т. д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...