Rubyの文字列内から部分文字列を抽出するにはどうすればよいですか?
例:
String1 = "<name> <substring>"
substring
をString1
から抽出したい(つまり、<
と>
の最後の出現内のすべて)。
String1.scan(/<([^>]*)>/).last.first
scan
は、<item>
内のString1
ごとに、1要素配列の<
と>
の間のテキストを含む配列を作成します(使用される場合)キャプチャグループを含む正規表現では、スキャンは各一致のキャプチャを含む配列を作成します)。 last
はそれらの配列の最後を提供し、first
はその中の文字列を提供します。
"<name> <substring>"[/.*<([^>]*)/,1]
=> "substring"
結果が1つだけ必要な場合は、scan
を使用する必要はありません。String[regexp,#]
があれば、match
を使用する必要はありません。
参照: http://Ruby-doc.org/core/String.html#method-i-5B-5D
注:str[regexp, capture] → new_str or nil
正規表現をかなり簡単に使用できます…
Wordの周囲にスペースを許可します(ただし、スペースは保持しません)。
str.match(/< ?([^>]+) ?>\Z/)[1]
または許可されたスペースなし:
str.match(/<([^>]+)>\Z/)[1]
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"
より単純なスキャンは次のとおりです。
String1.scan(/<(\S+)>/).last