¿Cómo puedo extraer una subcadena de una cadena en Ruby?
Ejemplo:
String1 = "<name> <substring>"
Quiero extraer substringde String1(es decir, todo dentro de la última aparición de <y >).
String1.scan(/<([^>]*)>/).last.first
scancrea una matriz que, para cada <item>en String1contiene el texto entre el <y el >en una matriz de una elemento (porque cuando se utiliza con una expresión regular que contiene grupos de captura, exploración crea una matriz que contiene las capturas para cada partido). lastle da la última de esas matrices y firstluego le da la cadena que contiene.
"<name> <substring>"[/.*<([^>]*)/,1]
=> "substring"
No es necesario usar scan, si solo necesitamos un resultado.
No es necesario usar Python match, cuando tenemos Ruby String[regexp,#].
Ver: http://ruby-doc.org/core/String.html#method-i-5B-5D
Nota: str[regexp, capture] → new_str or nil
if we need only one resultmi solución. Ymatch()[]es más lento, porque son dos métodos en lugar de uno.string[regex]puede ser tan legible en este escenario, así que eso es lo que usé personalmente.Puedes usar una expresión regular para eso con bastante facilidad ...
Permitir espacios alrededor de la palabra (pero no mantenerlos):
O sin los espacios permitidos:
fuente
<>realmente deba ser lo último en la cadena. Si, por ejemplo, la cadenafoo <bar> bazestá permitida (y se supone que da el resultadobar), esto no funcionará.Aquí hay un enfoque un poco más flexible usando el
matchmétodo. Con esto, puede extraer más de una cadena:fuente
Un escaneo más simple sería:
fuente