2012-01-17 1 views
3

누구든지 2 개의 공백으로 탭을 일치시키고 바꿀 수있는 루비의 정규식을 가지고 있습니까?Ruby, regex로 탭을 일치시키고 2 칸으로 대체 하시겠습니까?

+1

코드베이스에서 탭 대신 공백을 사용하는 것처럼 들리는군요. 일부 커밋 스크립트를 통해이를 수행하면 부정적인 결과가 발생할 수 있다는 경고를받습니다. 범죄자의 로컬 저장소/작업 복사본은 최신 버전이 될 것으로 예상되지만 원격 저장소와의 차이점은 변경 사항을 표시합니다. 커밋이 성공한 후에 * 정정을 수행하는 것이 가장 좋습니다. –

답변

10

은 간단 할 수 없습니다 :

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

또는 gsub! 그것을 제자리에서 할 수 있습니다. – xaxxon

+0

문자열 안에 탭이있는 경우 탭이 교체되어 너무 명확하지 않습니다. 관심있는 유일한 탭은 각 행의 시작 부분에있는 탭입니다. – marines

6

당신이 (탭을 교체 약간 다른 작업입니다) 탭을 확장하려는 경우 :

# This algorithm by Brian Candler ([email protected]) 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 칸 씩 mn 등등.

관련 문제