Ich habe mehrere Zeichenfolgen, die so aussehen:
"((String1))"
Sie sind alle unterschiedlich lang. Wie kann ich die Klammern aus all diesen Zeichenfolgen in einer Schleife entfernen?
Ich habe mehrere Zeichenfolgen, die so aussehen:
"((String1))"
Sie sind alle unterschiedlich lang. Wie kann ich die Klammern aus all diesen Zeichenfolgen in einer Schleife entfernen?
Antworten:
Gehen Sie wie folgt vor String#tr
:
"((String1))".tr('()', '')
# => "String1"
tr!
, die eine Zeichenfolge an Ort und Stelle modifiziert, wiemy_string.tr!(')(','')
Wenn Sie nur die ersten beiden Zeichen und die letzten beiden Zeichen entfernen möchten, können Sie negative Indizes für die Zeichenfolge verwenden:
s = "((String1))"
s = s[2...-2]
p s # => "String1"
Wenn Sie alle Klammern aus der Zeichenfolge entfernen möchten, können Sie die Löschmethode für die Zeichenfolgenklasse verwenden:
s = "((String1))"
s.delete! '()'
p s # => "String1"
Verwenden String#gsub
mit regulären Ausdrücken:
"((String1))".gsub(/^\(+|\)+$/, '')
# => "String1"
"(((((( parentheses )))".gsub(/^\(+|\)+$/, '')
# => " parentheses "
Dadurch werden nur umgebende Klammern entfernt.
"(((((( This (is) string )))".gsub(/^\(+|\)+$/, '')
# => " This (is) string "
Für diejenigen, die darauf stoßen und nach Leistung suchen, sieht es so aus #delete
und #tr
ist ungefähr gleich schnell und 2-4x schneller als gsub
.
text = "Here is a string with / some forwa/rd slashes"
tr = Benchmark.measure { 10000.times { text.tr('/', '') } }
# tr.total => 0.01
delete = Benchmark.measure { 10000.times { text.delete('/') } }
# delete.total => 0.01
gsub = Benchmark.measure { 10000.times { text.gsub('/', '') } }
# gsub.total => 0.02 - 0.04
Hier ist ein noch kürzerer Weg, um dies zu erreichen:
1) mit Negative character class pattern matching
irb(main)> "((String1))"[/[^()]+/]
=> "String1"
^
- Entspricht allem, was NICHT in der Charakterklasse enthalten ist. Innerhalb der Charakterklasse haben wir (
und)
Oder mit globaler Substitution "AKA: gsub" wie andere erwähnt haben.
irb(main)> "((String1))".gsub(/[)(]/, '')
=> "String1"
((a))b
. Der erste wird nur zurückkehren a
, der zweite wird zurückkehrenab