Extrae una subcadena de una cadena en Ruby usando una expresión regular

¿Cómo puedo extraer una subcadena desde una cadena en Ruby?

Ejemplo:

String1 = " " 

Quiero extraer la substring de String1 (es decir, todo dentro de la última aparición de < y > ).

 String1.scan(/<([^>]*)>/).last.first 

scan crea una matriz que, para cada en String1 contiene el texto entre < y la > en una matriz de un elemento (porque cuando se usa con una expresión regular que contiene grupos de captura, scan crea una matriz que contiene las capturas para cada coincidencia) . last te da la última de esas matrices y first te da la cadena.

 " "[/.*<([^>]*)/,1] => "substring" 

No hay necesidad de usar scan , si solo necesitamos un resultado.
No hay necesidad de usar match , cuando tenemos String[regexp,#] .

Consulte: http://ruby-doc.org/core/String.html#method-i-5B-5D

Nota: str[regexp, capture] → new_str or nil

Puedes usar una expresión regular para eso con bastante facilidad …

Permitir espacios alrededor de la palabra (pero no guardarlos):

 str.match(/< ?([^>]+) ?>\Z/)[1] 

O sin los espacios permitidos:

 str.match(/<([^>]+)>\Z/)[1] 

Aquí hay un enfoque un poco más flexible utilizando el método de match . Con esto, puedes extraer más de una cadena:

 s = " " 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: " " matchdata[1] # first capture: "ants" matchdata[2] # second capture: "pants" 

Un escaneo más simple sería:

 String1.scan(/<(\S+)>/).last