2011-09-13 13 views
8

quiero extraer de esta cadenaLa extracción de los datos específicos de una cadena con expresiones regulares y Powershell

-proceso bloqueado-informe & # x0Aprocess id = "process435d948" taskpriority = "0" logused = "0" waitresource = "RID: 7: 1: 1132932: 0" waittime = "3962166" ownerId = "4641198" transactionname = "SELECT" lasttranstarted = "2011-09-13T17: 21: 54.950" XDES = "0x80c5f060" lockMode = "S" schedulerid = "4" kpid = "18444" estado = "susp terminó" SPID = "58" SBID = "0" ecid = "0"

El valor está en negrita, pero solo el valor o 58. Y este valor puede ser con valores diferentes, a veces 80 o 1000, etc. pero siempre> 50.

¿Cómo puedo hacer esto usando expresiones regulares y elegantes?

Respuesta

25

El rápido y sucio:

$found = $string -match '.*spid="(\d+)".*' 
if ($found) { 
    $spid = $matches[1] 
} 

donde $string es su cadena mencionado anteriormente. Esto coincidiría con cualquier cadena que tenga spid = "somenumberhere", y haga que el número sea un grupo coincidente, que puede extraer usando $matches[1].

+0

Por qué todo el '. *' En la expresión regular? – manojlds

+1

El '. *' Coincidirá con cualquier cosa antes y después en esa línea, es realmente necesario si usó ''^. * Spid =" (\ d +) ". * $'' – Thymine

+0

Puede dejarlos fuera, no Seguro sobre el impacto en el rendimiento de cualquier manera. Probablemente sea un poco más limpio/rápido dejarlos fuera, realmente no pensé mucho al respecto. –

0

Guárdalo como, por ejemplo $string.

Después, realice

$string -match 'spid="(\d+)"' 

Si hay una coincidencia, el valor que desea estará en $matches[1]

Cuestiones relacionadas