regulares regular reg online expresiones ruby regex string substring

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.