it-swarm.com.de

Ruby Funktion zum Entfernen aller Leerzeichen?

Was ist die Ruby -Funktion, um alle Leerzeichen zu entfernen? Ein bisschen wie PHP trim()?

535
gpwu

Wenn Sie nur führende und nachfolgende Leerzeichen entfernen möchten (wie bei PHP), können Sie .strip verwenden, aber wenn Sie all entfernen möchten Leerzeichen können Sie stattdessen .gsub(/\s+/, "") verwenden.

811
joel.neely
s = "I have white space".delete(' ')

Und um die Funktion trim() von PHP zu emulieren:

s = "   I have leading and trailing white space   ".strip
474
Ed S.

Verwandte Antwort:

"   clean up my edges    ".strip

kehrt zurück

"clean up my edges"
159
jrhicks

String#strip - Alle Leerzeichen am Anfang und am Ende entfernen.

String#lstrip - von Anfang an.

String#rstrip - nur vom Ende.

String#chomp (ohne Argumente) - löscht Zeilentrennzeichen (_\n_ oder _\r\n_) am Ende.

String#chop - löscht das letzte Zeichen.

String#delete - x.delete(" \t\r\n") - löscht alle aufgelisteten Leerzeichen.

String#gsub - x.gsub(/[[:space:]]/, '') - Entfernt alle Leerzeichen, einschließlich nicode-Zeichen .


Hinweis : Alle oben genannten Methoden geben eine neue Zeichenfolge zurück, anstatt die ursprüngliche zu mutieren. Wenn Sie die Zeichenfolge ändern möchten, rufen Sie die entsprechende Methode mit _!_ am Ende auf.

138
ndnenkov
"1232 23 2 23 232 232".delete(' ')
=> "123223223232232"

Löschen funktioniert schneller =)

user         system     total      real
gsub, s      0.180000   0.010000   0.190000 (0.193014)
gsub, s+     0.200000   0.000000   0.200000 (0.196408)
gsub, space  0.220000   0.000000   0.220000 (0.222711)
gsub, join   0.200000   0.000000   0.200000 (0.193478)
delete       0.040000   0.000000   0.040000 (0.045157)
92
rusllonrails

Sie können die Methode squish verwenden. Es entfernt Leerzeichen an beiden Enden der Zeichenfolge und gruppiert mehrere Leerzeichen zu einzelnen Leerzeichen.

Zum Beispiel.

" a  b  c ".squish

führt zu:

"a b c"

Überprüfen Sie diese Referenz von api.rubyonrails.org .

BEARBEITEN: Es funktioniert nur für Ruby on Rails

80
Radhika

Es ist ein bisschen spät, aber jeder, der diese Seite googelt, könnte an dieser Version interessiert sein -

Wenn Sie einen Teil des vorformatierten Texts bereinigen möchten, den ein Benutzer möglicherweise ausgeschnitten und in Ihre App eingefügt hat, aber den Wortabstand beibehalten möchten, versuchen Sie Folgendes:

content = "      a big nasty          chunk of     something

that's been pasted                        from a webpage       or something        and looks 

like      this

"

content.gsub(/\s+/, " ").strip

#=> "a big nasty chunk of something that's been pasted from a webpage or something and looks like this"
47
Jules Copeland

Rubys .strip -Methode führt das PHP -Äquivalent zu trim() aus.

So entfernen Sie alle Leerzeichen:

"  leading    trailing   ".squeeze(' ').strip
=> "leading trailing"

@Tass hat mich darauf aufmerksam gemacht, dass meine ursprüngliche Antwort doppelte Buchstaben nacheinander entfernt - YUCK! Ich bin seitdem auf die Squish-Methode umgestiegen, die bei solchen Ereignissen intelligenter ist, wenn das Framework Rails verwendet wird.

require 'active_support/all'
"  leading    trailing   ".squish
=> "leading trailing"

"  good    men   ".squish
=> "good men"

Zitieren: http://apidock.com/Rails/String/squish

44
scarver2
" Raheem Shaik ".strip

Es werden linke und rechte Seitenräume entfernt. Dieser Code würde uns geben: "Raheem Shaik"

25
Buddy

Vergessen Sie auch nicht:

$ s = "   I have white space   ".split
=> ["I", "have", "white", "space"]
20
Justicle

split.join sprengt alle Leerzeichen in der Zeichenfolge.

"  a b  c    d     ".split.join
> "abcd"

Es ist einfach zu tippen und zu merken, daher ist es auf der Konsole und für schnelles Hacken eine gute Wahl. Wohl nicht im seriösen Code willkommen, da er die Absicht maskiert.

(Basierend auf Piotrs Kommentar in Antwort von Justicle oben.)

19
mahemoff

Sie könnten das versuchen

"Some Special Text Values".gsub(/[[:space:]]+/, "")

mit : space: wird das nicht unterbrechende Leerzeichen zusammen mit dem regulären Leerzeichen entfernt.

9
EBooker

Verwenden Sie gsub oder delete. Der Unterschied ist, dass gsub Tabs entfernen kann, während delete dies nicht kann. Manchmal haben Sie Registerkarten in Dateien, die von den Redakteuren hinzugefügt werden.

a = "\tI have some whitespaces.\t"
a.gsub!(/\s/, '')  #=>  "Ihavesomewhitespaces."
a.gsub!(/ /, '')   #=>  "\tIhavesomewhitespaces.\t"
a.delete!(" ")     #=>  "\tIhavesomewhitespaces.\t"
a.delete!("/\s/")  #=>  "\tIhavesomewhitespaces.\t"
a.delete!('/\s/')  #=>  using single quote is unexpected, and you'll get "\tI have ome whitepace.\t"
7
euccas
"asd sda sda sd".gsub(' ', '')
=> "asdsdasdasd"
6
edikgat

Die gsub-Methode reicht völlig aus.
Die gsub-Methode kann für einen String aufgerufen werden und lautet:

a = "this is a string"
a = a.gsub(" ","")
puts a
#Output: thisisastring

Die gsub-Methode sucht nach jedem Vorkommen des ersten Arguments und ersetzt es durch das zweite Argument. In diesem Fall wird jedes Leerzeichen in der Zeichenfolge ersetzt und entfernt.

Ein anderes Beispiel:

b = "the white fox has a torn tail"

Lassen Sie uns jedes Vorkommen des Buchstabens "t" durch ein großes "T" ersetzen

b = b.gsub("t","T")
puts b 
#Output: The whiTe fox has a Torn Tail
6
bdbasinger

Für ein Verhalten, das genau mit PHP trim übereinstimmt, verwenden Sie am einfachsten die String#strip -Methode wie folgt:

string = "  Many have tried; many have failed!    "
puts "Original [#{string}]:#{string.length}"
new_string = string.strip
puts "Updated  [#{new_string}]:#{new_string.length}"

Ruby hat auch eine Edit-in-Place-Version mit dem Namen String.strip! (beachten Sie das abschließende '!'). Dies erfordert keine Kopie der Zeichenfolge und kann für einige Zwecke erheblich schneller sein:

string = "  Many have tried; many have failed!    "
puts "Original [#{string}]:#{string.length}"
string.strip!
puts "Updated  [#{string}]:#{string.length}"

Beide Versionen erzeugen diese Ausgabe:

Original [  Many have tried; many have failed!    ]:40
Updated  [Many have tried; many have failed!]:34

Ich habe einen Benchmark erstellt, um die Leistung einiger grundlegender Verwendungen von strip und strip! sowie einiger Alternativen zu testen. Der Test ist dieser:

require 'benchmark'

string = 'asdfghjkl'
Times = 25_000

a = Times.times.map {|n| spaces = ' ' * (1+n/4); "#{spaces}#{spaces}#{string}#{spaces}" }
b = Times.times.map {|n| spaces = ' ' * (1+n/4); "#{spaces}#{spaces}#{string}#{spaces}" }
c = Times.times.map {|n| spaces = ' ' * (1+n/4); "#{spaces}#{spaces}#{string}#{spaces}" }
d = Times.times.map {|n| spaces = ' ' * (1+n/4); "#{spaces}#{spaces}#{string}#{spaces}" }

puts Ruby_DESCRIPTION
puts "============================================================"
puts "Running tests for trimming strings"

Benchmark.bm(20) do |x|
  x.report("s.strip:")                 { a.each {|s| s = s.strip } }
  x.report("s.rstrip.lstrip:")         { a.each {|s| s = s.rstrip.lstrip } }
  x.report("s.gsub:")                  { a.each {|s| s = s.gsub(/^\s+|\s+$/, "") } }
  x.report("s.sub.sub:")               { a.each {|s| s = s.sub(/^\s+/, "").sub(/\s+$/, "") } }

  x.report("s.strip!")                 { a.each {|s| s.strip! } }
  x.report("s.rstrip!.lstrip!:")       { b.each {|s| s.rstrip! ; s.lstrip! } }
  x.report("s.gsub!:")                 { c.each {|s| s.gsub!(/^\s+|\s+$/, "") } }
  x.report("s.sub!.sub!:")             { d.each {|s| s.sub!(/^\s+/, "") ; s.sub!(/\s+$/, "") } }
end

Das sind die Ergebnisse:

Ruby 2.2.5p319 (2016-04-26 revision 54774) [x86_64-darwin14]
============================================================
Running tests for trimming strings
                           user     system      total        real
s.strip:               2.690000   0.320000   3.010000 (  4.048079)
s.rstrip.lstrip:       2.790000   0.060000   2.850000 (  3.110281)
s.gsub:               13.060000   5.800000  18.860000 ( 19.264533)
s.sub.sub:             9.880000   4.910000  14.790000 ( 14.945006)
s.strip!               2.750000   0.080000   2.830000 (  2.960402)
s.rstrip!.lstrip!:     2.670000   0.320000   2.990000 (  3.221094)
s.gsub!:              13.410000   6.490000  19.900000 ( 20.392547)
s.sub!.sub!:          10.260000   5.680000  15.940000 ( 16.411131)
5
Michael Gaskill

Ich habe versucht, dies zu tun, weil ich einen Datensatz "title" als ID in der Ansicht verwenden wollte, aber die Titel hatten Leerzeichen.

eine Lösung ist:

record.value.delete(' ') # Foo Bar -> FooBar
3
Brad

Meine persönliche Präferenz ist die Verwendung der Methode .tr

wie in:

string = "this is a string to smash together"

string.tr(' ', '') # => "thisisastringtosmashtogether"

Vielen Dank an @FrankScmitt für den Hinweis, dass Sie zum Löschen alle Leerzeichen (nicht nur Leerzeichen) als solche schreiben müssen:

string = "this is a string with tabs\t and a \nnewline"

string.tr(" \n\t", '') # => "thisisastringwithtabsandanewline"
2
Jeremy Gunter

Ich würde so etwas verwenden:

my_string = "Foo bar\nbaz quux"

my_string.split.join
=> "Foobarbazquux"
1
Artur Okoński

Rubys Methoden .scan() und .join() von String können auch dazu beitragen, Leerzeichen in Zeichenfolgen zu überwinden.

scan(/\w+/).join entfernt alle Leerzeichen und verbindet die Zeichenfolge

string = "White spaces in me".scan(/\w+/).join
=>"Whitespacesinme"

Es entfernt auch Leerzeichen vom linken und rechten Teil der Zeichenkette. Bedeutet ltrim, rtrim und trim. Nur für den Fall, dass jemand einen Hintergrund über C, FoxPro oder Visual Basic hat und in Ruby springt.

2.1.6 :002 > string = " White spaces in me ".scan(/\w+/).join => "Whitespacesinme" 2.1.6 :003 > string = " White spaces in me".scan(/\w+/).join => "Whitespacesinme" 2.1.6 :004 > string = "White spaces in me ".scan(/\w+/).join => "Whitespacesinme" 2.1.6 :005 >

1
Dharmesh Rupani