回答:
"<name> <substring>"[/.*<([^>]*)/,1]
=> "substring"
scan
結果が1つだけ必要な場合は、を使用する必要はありません。Rubyがあれば、
Pythonを使用する必要はありません。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()[]
、それは1つではなく、2つの方法だから、遅くなります。
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"