문자열 내부의 여러 공백과 새 줄 제거


104

다음과 같은 문자열이 있다고 가정합니다.

Hello, my\n       name is Michael.

새 줄을 제거하고 그 이후의 공백을 문자열 내부로 제거하여 이것을 얻을 수 있습니까?

Hello, my name is Michael.

답변:


188

Rails squish방법을 확인하십시오 .

http://apidock.com/rails/String/squish


6
가장 간단하고 우아한 솔루션입니다. 감사. 하지만 한 가지가 있습니다.이 방법은 Rails에 정의되어 있으므로 Rails 애플리케이션에서만 작동합니다. 운 좋게도 제 경우입니다.
Kreeki 2011-08-18

4
Kreeki가 약간 불분명하다고 말했듯이 이것은 Ruby 메소드가 아니라 Rails 메소드입니다.

17
비 레일 컨텍스트의 경우 some_string.strip.gsub(/\s+/, " ")정확히 squish가하는 일을 사용하십시오 .
rapcal

1
감사합니다! 몰랐습니다squish
Francois

38

squeeze에 내장 된 Ruby를 설명하려면 다음을 수행하십시오.

string.gsub("\n", ' ').squeeze(' ')

3
주의하십시오. squeeze는 여러 문자로 실행되는 모든 문자열을 압축합니다. 그래서 "내 응용 프로그램의 사본을 꽉 잡고".squeeze => "내 aplication의 사본을 Squeze"
charliepark

8
그러나 squeeze(' ')공간을 쥐어 짜십시오. "Squeeze my application's copy".squeeze(' ') => "Squeeze my application's copy".
steenslag

22

가장 간단한 방법은 아마도

s = "Hello, my\n       name is Michael."
s.split.join(' ') #=> "Hello, my name is Michael."

8

이 시도:

s = "Hello, my\n       name is Michael."
s.gsub(/\n\s+/, " ")

이것은 실제로 가장 좋은 "일반적인 루비"대답이며 여러 줄 문자열에서 선행 공백을 제거하는 데 적합합니다.
Koen.

5
my_string = "Hello, my\n       name is Michael."
my_string = my_string.gsub( /\s+/, " " )

그는 또한 \n이상적으로 제거하고 싶습니다 (내 생각에) 다음과 같은 경우 공백으로 대체해야합니다"Hello,\nMy name is Michael"
Ali a

4

이 정규식은 1 개 이상의 공백 인스턴스를 1 개의 공백으로 \s바꾸고 , ps 는 \s\t\r\n\f다음 을 포함하는 모든 공백 문자를 대체합니다 .

a_string.gsub!(/\s+/, ' ')

캐리지 리턴에만 유사

str.gsub!(/\n/, " ")

먼저 모두 \n공백으로 바꾼 다음 여러 공백 제거 정규식을 사용하십시오.


감사! 이것은 여러 공백을 제거하지만 단어 사이에 단일 공백을 유지하기 위해 내 목적을 위해 작동했습니다.
acoustic_north

3

사용 문자열 #의 GSUB :

s = "Hello, my\n       name is Michael."
s.gsub(/\s+/, " ")

의 경우 출력이 올바르지 않습니다 "Hello,\nMy name is Michael". 가있는 곳에 이상적으로 당신은 공간을 원하는 것\n
알리

1
Use squish
currency = " XCD"
str = currency.squish
 str = "XCD" #=> "XCD"

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.