次のような文字列がいくつかあります。
"((String1))"
それらはすべて異なる長さです。ループ内のこれらすべての文字列から括弧を削除するにはどうすればよいですか?
次のような文字列がいくつかあります。
"((String1))"
それらはすべて異なる長さです。ループ内のこれらすべての文字列から括弧を削除するにはどうすればよいですか?
回答:
以下を使用して実行しますString#tr。
"((String1))".tr('()', '')
# => "String1"
tr!ように、文字列をインプレースで変更する破壊的なバージョンもありますmy_string.tr!(')(','')
この出くわすとパフォーマンスをお探しの方のために、それは次のようになります#deleteし、#trスピードと2-4x速くより約同じです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
String#gsub正規表現での使用:
"((String1))".gsub(/^\(+|\)+$/, '')
# => "String1"
"(((((( parentheses )))".gsub(/^\(+|\)+$/, '')
# => " parentheses "
これにより、周囲の括弧のみが削除されます。
"(((((( This (is) string )))".gsub(/^\(+|\)+$/, '')
# => " This (is) string "
これを実現するさらに短い方法は次のとおりです。
1)使用する Negative character class pattern matching
irb(main)> "((String1))"[/[^()]+/]
=> "String1"
^-文字クラスにないものと一致します。キャラクタークラスの中には(、)
または、他の人が言及したように、グローバル置換「AKA:gsub」を使用します。
irb(main)> "((String1))".gsub(/[)(]/, '')
=> "String1"
((a))bます。最初は戻るだけaで、2番目は戻るab