मेरे पास कई तार हैं जो इस तरह दिखते हैं:
"((String1))"
वे सभी अलग-अलग लंबाई के हैं। मैं इन सभी तारों से कोष्ठक को एक पाश में कैसे निकाल सकता हूं?
मेरे पास कई तार हैं जो इस तरह दिखते हैं:
"((String1))"
वे सभी अलग-अलग लंबाई के हैं। मैं इन सभी तारों से कोष्ठक को एक पाश में कैसे निकाल सकता हूं?
जवाबों:
नीचे का उपयोग कर के रूप में String#tr:
"((String1))".tr('()', '')
# => "String1"
tr!एक स्ट्रिंग को जगह में संशोधित करेगा, जैसेmy_string.tr!(')(','')
यदि आप पहले दो वर्णों और अंतिम दो को निकालना चाहते हैं, तो आप स्ट्रिंग पर नकारात्मक अनुक्रमित का उपयोग कर सकते हैं :
s = "((String1))"
s = s[2...-2]
p s # => "String1"
यदि आप स्ट्रिंग से सभी कोष्ठक हटाना चाहते हैं, तो आप स्ट्रिंग कक्षा पर डिलीट विधि का उपयोग कर सकते हैं :
s = "((String1))"
s.delete! '()'
p s # => "String1"
इसके पार आने वालों और प्रदर्शन की तलाश में, यह जैसा दिखता है #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, दूसरा वापस आ जाएगाab