উত্তর:
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"