online - Extrae una subcadena de una cadena en Ruby usando una expresión regular
ruby string (5)
Aquí hay un enfoque un poco más flexible usando el método de match
. Con esto, puedes extraer más de una cadena:
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"
¿Cómo puedo extraer una subcadena dentro de una cadena en Ruby?
Ejemplo:
String1 = "<name> <substring>"
Quiero extraer una substring
de String1
(es decir, todo dentro de la última aparición de <
y >
).
Puedes usar una expresión regular para eso con bastante facilidad ...
Permitir espacios alrededor de la palabra (pero no mantenerlos):
str.match(/< ?([^>]+) ?>/Z/)[1]
O sin los espacios permitidos:
str.match(/<([^>]+)>/Z/)[1]
Un escaneo más simple sería:
String1.scan(/<(/S+)>/).last
"<name> <substring>"[/.*<([^>]*)/,1]
=> "substring"
No es necesario usar el scan
, si solo necesitamos un resultado.
No es necesario usar match
, cuando tenemos String[regexp,#]
.
Ver: http://ruby-doc.org/core/String.html#method-i-5B-5D
Nota: str[regexp, capture] → new_str or nil
String1.scan( /<([^>]*)>/).last.first
scan
crea una matriz que, para cada <item>
en String1
contiene el texto entre <
y >
en una matriz de un elemento (porque cuando se usa con una expresión regular que contiene grupos de captura, la exploración crea una matriz que contiene las capturas para cada coincidencia) . last
te da la última de esas matrices y first
te da la cadena.