2014-10-12 3 views
-1

줄 바꿈을 유지하면서 줄 바꿈을 따르는 공백과 탭을 여러 개 제거하려고합니다. 예 문자열 :줄 바꿈 다음에 여러 공백 제거

str = "This is a really good morning\n    " 

어떻게이 "\n" 후 여러 공백을 제거 할 수 있습니까?

+1

그런 문자가 하나만있는 경우 제거하지 않으시겠습니까? – sawa

+0

@sawa 아니, 실제로 내 문자열은 멀티 스페이스와 어쩌면 탭 뒤에 더 많은 문자열이 있기 때문에 원하는 것은 아니지만 질문에 추가하지 않았다. 필요하거나 아니, 난 그냥 다중 공간이나 탭이 첫 번째 linebreak 후 제거해야합니다 묻는다면. 나는 내부에도 줄 바꿈이 있다면 어떤 일이 일어날 지 모르겠다. – LuminaChen

+0

하지만 중요한 것은이 질문에 답이 있다는 것입니다. 그리고 내 경우에는, 내가 원하는 whit을하는 법을 알 수있을 것입니다. – LuminaChen

답변

0

정규 표현식 (String#sub를) 사용 :

str.sub(/[ \t]{2,}\z/, '') 
# => "This is a really good morning\n" 
+0

오, 알았어, 그거 좋았어, 나는 더 묻고 싶다. 달러 기호의 의미는 무엇인가? – LuminaChen

+1

'$'를 문자열의 끝으로 사용하려는 경우'gsub'를 사용하는 점은 무엇입니까? – sawa

+1

@sawa, Ah. 네가 옳아. 'sub'만으로 충분합니다. 그것을 지적 해 주셔서 감사합니다. 그에 따라 답변을 업데이트했습니다. – falsetru

0

문제는 명확하지 않다 :

str = "This is a really good morning\n    " 
str.sub(/[ \t]+\z/, '') # `[ \t]+\z` matches spaces, tabs at the end of the string. 
# => "This is a really good morning\n" 

여러 공간 (2 개 이상)를 제거 할 경우

. 내가 가정 한 내용을 다른 해석이 가능하지만 여기입니다 :

  • 마지막 공백이 아닌 문자가 문자열의 마지막 문자 인 경우, 문자열을 반환;

  • else 공백이 아닌 마지막 문자 다음에 오는 공백 문자가 개행 문자 ("\ n")를 포함하지 않는 경우, 뒤 공백 문자를 제거하십시오.

  • 그 밖의 경우 마지막 비 공백 문자 다음에 오는 첫 번째 줄 바꿈 문자 뒤의 공백 문자를 제거합니다.

공백 문자가 아닌 모든 개행 문자는 공백 문자가 아닌 것으로 간주된다는 결과가 발생합니다.

이러한 가정 구현이 하나 개의 방법 :

def strip_it(str) 
    len = str.strip.size 
    i = str[len..-1].index("\n") 
    i ? str[0,len+i+1] : str.rstrip 
end 

몇 가지 예 :

strip_it "This is a really good morning\n    " 
    #=> "This is a really good morning\n" 

strip_it "This is a really good morning \n    " 
    #=> "This is a really good morning \n" 

strip_it "This is a really good morning" 
    #=> "This is a really good morning" 

strip_it "This is a really good morning\n cat  " 
    #=> "This is a really good morning\n cat" 

strip_it "This is a really good morning\n cat\n  " 
    #=> "This is a really good morning\n cat\n" 

strip_it "This is a really good morning\n cat \n  " 
    #=> "This is a really good morning\n cat \n" 

strip_it "This is a really good morning\n cat \n dog \n " 
    #=> "This is a really good morning\n cat \n dog \n" 

루미나를, 그것은 I'm dancing on the head of a pin처럼 보일지도 모르지만, 나는 몇 가지 세부 사항으로 간 이유 중 하나는 보여주는 것입니다 당신은 왜 가정과 요구 조건을 정확하게 설명 할 필요가있는가? 실제 응용 프로그램에서는 요구 사항이 명확하지 않을 때 재난을 기다리고 있습니다.

+1

질문이 명확하지 않습니다. 줄 바꿈이있을 경우 줄 바꿈을 유지하려는 경우이 대답은 원하지 않는 줄을 추가 할 수 있습니다. – sawa

+0

@sawa도 나에게 발생 했으므로 편집했습니다. 나는 또한 첫 번째 줄 바꿈 이전에 가능한 공백에 대해 우려했다. –

+0

내가 할 일이 너무 많아. – LuminaChen