जवाबों:
String1.scan(/<([^>]*)>/).last.first
scan
एक सरणी जो, प्रत्येक के लिए बनाता <item>
में String1
के बीच पाठ होता है <
और >
(क्योंकि जब एक regex कब्जा समूहों युक्त के साथ प्रयोग किया, स्कैन प्रत्येक मैच के लिए कैप्चर युक्त एक सरणी बनाता है) एक एक तत्व सरणी में। last
आपको उन सरणियों में से अंतिम first
देता है और फिर आपको इसमें स्ट्रिंग देता है।
"<name> <substring>"[/.*<([^>]*)/,1]
=> "substring"
scan
यदि हमें केवल एक परिणाम की आवश्यकता है, तो उपयोग करने की आवश्यकता नहीं है । जब हम रूबी है, तो
पायथन का उपयोग करने की आवश्यकता नहीं हैmatch
String[regexp,#]
।
देख: http://ruby-doc.org/core/String.html#method-i-5B-5D
ध्यान दें: str[regexp, capture] → new_str or nil
if we need only one result
अपने समाधान में बताया । और match()[]
धीमी है, क्योंकि यह एक के बजाय दो तरीके हैं।
string[regex]
इस परिदृश्य में केवल पठनीय हो सकता है, इसलिए यही मैंने व्यक्तिगत रूप से उपयोग किया है।
आप बहुत आसानी से…
शब्द के आसपास रिक्त स्थान आवंटित करना (लेकिन उन्हें नहीं रखना):
str.match(/< ?([^>]+) ?>\Z/)[1]
या बिना रिक्त स्थान की अनुमति के:
str.match(/<([^>]+)>\Z/)[1]
<>
वास्तव में स्ट्रिंग में आखिरी चीज होने की आवश्यकता है। यदि उदाहरण के लिए स्ट्रिंग foo <bar> baz
की अनुमति है (और परिणाम देने वाला है bar
), तो यह काम नहीं करेगा।
यहां match
विधि का उपयोग करके थोड़ा अधिक लचीला दृष्टिकोण है । इसके साथ, आप एक से अधिक स्ट्रिंग निकाल सकते हैं:
s = "<ants> <pants>"
matchdata = s.match(/<([^>]*)> <([^>]*)>/)
# Use 'captures' to get an array of the captures
matchdata.captures # ["ants","pants"]
# Or use raw indices
matchdata[0] # whole regex match: "<ants> <pants>"
matchdata[1] # first capture: "ants"
matchdata[2] # second capture: "pants"