2013-10-28 7 views
47

私はこのようになり、いくつかの文字列を持っています。どのようにループ内のこれらの文字列すべてからかっこを削除できますか?Rubyの文字列から特定の文字を切り取る方法は?</p> <pre><code>"((String1))" </code></pre> <p>彼らはすべての異なる長さは、次のとおりです。

+2

括弧を削除するか、「ランダム」文字列の最初の2文字と最後の2文字を削除しますか? (実際にランダム?) – iamnotmaynard

+0

"((String1))" [2 ... -2]#=> "String1" – iamnotmaynard

+1

http://www.ruby-doc.org/core-1.9.3/String.html – iamnotmaynard

答えて

111

String#trを使用して以下のように実行します。

"((String1))".tr('()', '') 
# => "String1" 
+6

'my_string.tr!( ')('、 '')' – bonh

+0

のようなインプレースの文字列を変更する破壊的なバージョン 'tr!'もあります。@bonhはい...ありがとうございました.. –

+2

注意してくださいこの関数は最初または最後からトリミングされませんが、文字列内のすべてのテキストが完全に置換されます。 – Jordan

13

正規表現でString#gsubを使用する:

"((String1))".gsub(/^\(+|\)+$/, '') 
# => "String1" 
"((((((parentheses)))".gsub(/^\(+|\)+$/, '') 
# => " parentheses " 

これは、周囲の括弧のみを削除します。

"((((((This (is) string)))".gsub(/^\(+|\)+$/, '') 
# => " This (is) string " 
+1

+1(囲む括弧のみを削除)。 –

33

あなただけの、あなたが文字列にnegative indexesを使用することができ、最初の2つの文字と最後の2を削除する場合:

s = "((String1))" 
s = s[2...-2] 
p s # => "String1" 

文字列からすべてのカッコを削除する場合は、文字列クラスのdeleteメソッドを使用できます。

この出くわすとパフォーマンスをお探しの方に
s = "((String1))" 
s.delete! '()' 
p s # => "String1" 
+7

これは、(見た目に)OPが望むものではない、文字列の中央にある括弧もすべて削除します。これが必要な場合は、これは最も洗練されたソリューションです。 – iamnotmaynard

7

#delete#trgsubより速い程度の速度で同じと2-4xあるように、それが見えます。文字クラスには何もしないでマッチ - 使用して

1)Negative character class pattern matching

irb(main)> "((String1))"[/[^()]+/] 
=> "String1" 

^は:ここでは

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 
1

はこれを達成するためのさらに短い方法です。 charachterクラスの内部には、()

があります。他にも言及しているように、グローバル置換「AKA:gsub」を使用しています。

irb(main)> "((String1))".gsub(/[)(]/, '') 
=> "String1" 
関連する問題

 関連する問題