जवाबों:
String1.scan(/<([^>]*)>/).last.first
scanएक सरणी जो, प्रत्येक के लिए बनाता <item>में String1के बीच पाठ होता है <और >(क्योंकि जब एक regex कब्जा समूहों युक्त के साथ प्रयोग किया, स्कैन प्रत्येक मैच के लिए कैप्चर युक्त एक सरणी बनाता है) एक एक तत्व सरणी में। lastआपको उन सरणियों में से अंतिम firstदेता है और फिर आपको इसमें स्ट्रिंग देता है।
"<name> <substring>"[/.*<([^>]*)/,1]
=> "substring"
scanयदि हमें केवल एक परिणाम की आवश्यकता है, तो उपयोग करने की आवश्यकता नहीं है । जब हम रूबी है, तो
पायथन का उपयोग करने की आवश्यकता नहीं हैmatchString[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"