2010-06-22 5 views

Respuesta

20

Cualquier cosa entre paréntesis en una expresión regular será capturado como un grupo, al que puede acceder en $1, $2, etc., o mediante el uso de [] en un objeto partido:

string.match(/:\d+(.+)$/)[1] 

Si utilizar la exploración con la captura grupos, obtendrá una matriz de matrices de los grupos:

"Unnecessary:123data\nUnnecessary:5791next".scan(/:\d+(.+)$/) 
=> [["data"], ["next"]] 
1

Prueba esto: /(?<=\:)\d+.+$/

Cambia el colon a un aspecto positivo detrás para que no aparezca en la salida. Tenga en cuenta que solo el colon es un metacarácter y, por lo tanto, se debe escapar con una barra diagonal inversa.

+0

me sale error 'SyntaxError: Error de compilación indefinido (? ...) secuencia:/(? <=:) \ d +. + $/' –

+0

Haha. El motor de expresión regular de Ruby probablemente no implemente las miras posteriores. Sin embargo, las otras respuestas lo ayudarán a superar el problema. – huntaub

3

Use paréntesis en su expresión regular y el resultado se dividirá en una matriz. Por ejemplo:

x='Unnecessary:12357927251data' 
x.scan(/(:\d+)(.+)$/) 
=> [[":12357927251", "data"]] 
x.scan(/:\d+(.+$)/).flatten 
=> ["data"] 
0

Usando IRB

irb(main):004:0> "Unnecessary:12357927251data".scan(/:\d+(.+)$/) 
=> [["data"]] 
1

Suponiendo que usted está tratando de obtener la cadena 'datos' de su cadena, entonces se puede utilizar:

string.match(/.*:\d*(.*)/)[1] 

Cadena # Partido devuelve un objeto MatchData. A continuación, puede indexar en ese objeto MatchData para encontrar la parte de la cadena que desea.

(El primer elemento de MatchData es la cadena original, el segundo elemento es la parte de la cadena capturada por los paréntesis)

Cuestiones relacionadas