Pytanie Usuń wiele spacji i nowych linii wewnątrz ciągu


Załóżmy, że mamy ciąg jak poniżej:

Hello, my\n       name is Michael.

Jak mogę usunąć tę nową linię i usunąć te spacje w jeden ciąg znaków, aby to uzyskać?

Hello, my name is Michael.

76
2017-08-18 11:50


pochodzenie




Odpowiedzi:


sprawdź Rails squish metoda:

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


148
2017-08-18 12:02



Najprostsze i najbardziej eleganckie rozwiązanie. Dzięki. Ale jest jedna rzecz, ta metoda jest zdefiniowana w Railsach, więc będzie działać tylko w aplikacjach Rails, na szczęście to jest moja sprawa. - Kreeki
fajny :) nigdy o tym nie słyszałem - fl00r
Jak Kreeki powiedział nieco niejasno, jest to metoda Rails, a nie metoda Ruby.
Dla kontekstu innego niż Railsowy użyj some_string.strip.gsub(/\s+/, " ") właśnie to robi squish. - rapcal
Dziękuję wszystkim, bardzo fajna wskazówka :) - Blue Smith


Aby zilustrować wbudowany Rubys ściskać:

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

33
2017-08-18 12:08



Po prostu pamiętaj: squeeze skompresuje WSZYSTKIE ciągi, które występują w wielu różnych znakach. Tak więc "ściśnij kopię mojego wniosku" .squeeze => "Odłóż kopię mojej aplikacji" - charliepark
Ale squeeze(' ') po prostu ściska spacje. "Squeeze my application's copy".squeeze(' ') => "Squeeze my application's copy". - steenslag
Ah. Słuszna uwaga! - charliepark


Najprostszym sposobem byłoby prawdopodobnie

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

17
2017-08-18 11:56



To trudne, ale działa jak urok. - Kreeki


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

4
2017-08-18 11:57



chciałby także usunąć \n idealnie (jak sądzę) należy go zastąpić spacją w przypadku czegoś podobnego "Hello,\nMy name is Michael" - Ali
@Ali, to prawda - fl00r


to wyrażenie zastępuje instancję 1 lub więcej białych spacji za pomocą 1 białej spacji, p.s \s zastąpi wszystkie znaki spacji, które zawierają \s\t\r\n\f:

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

Podobnie jest tylko w przypadku powrotu karetki

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

Najpierw wymień wszystko \n z białą spacją, a następnie użyj polecenia usunięcia spacji z białymi spacjami.


4
2017-08-18 11:56



Dzięki! To działało dla moich celów, aby usunąć spacje wielokrotne, ale zachować pojedynczą spację między wyrazami. - acoustic_north


Posługiwać się String # gsub:

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

3
2017-08-18 11:56



wyjście nie byłoby poprawne w przypadku "Hello,\nMy name is Michael". Idealnie chciałbyś mieć przestrzeń, w której jest \n - Ali
Masz rację, poprawiłem to. - Nikola


Spróbuj tego:

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

3
2018-04-30 13:03



Elegancko, dziękuję! - Vlad
Jest to w rzeczywistości najlepsza odpowiedź "zwykły rubin" i działa poprawnie w celu usunięcia spacji z ciągu wieloliniowego. - Koen.


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

1
2017-12-20 05:24