2011-09-13 17 views
8

Voglio estrarre da questa stringaEstrazione dati specifici da una stringa con regex e Powershell

bloccato-processo-report & # x0Aprocess id = taskpriority "process435d948" = "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 = kpid = stato "4" "18444" = "susp finito" SPID = "58" SBID = "0" ecid = "0"

Il valore che è in grassetto, ma solo il valore o 58. E questo valore può essere con valori diversi, a volte 80 o 1000, ecc. Ma sempre> 50.

Come posso fare questo usando regex e posh?

risposta

25

Il rapido e sporco:

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

dove $string è la stringa di cui sopra. Questo corrisponderebbe a qualsiasi stringa che abbia spid = "somenumberhere" e trasformi il numero in un gruppo abbinato, che puoi estrarre usando $matches[1].

+0

Perché tutto il '. *' Nel regex? – manojlds

+1

Il '. *' Corrisponderà a qualsiasi cosa prima e dopo su quella linea, è davvero necessario solo se si usa ''^. * Spid =" (\ d +) ". * $'' – Thymine

+0

Si potrebbero lasciare fuori, non sicuro sull'impatto delle prestazioni in entrambi i modi. Probabilmente è un po 'più pulito/veloce a lasciarli fuori, non ci ha davvero pensato molto. –

0

Salvarlo come, ad esempio $string.

Poi fanno

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

Se c'è una corrispondenza, il valore che si desidera sarà in $matches[1]

Problemi correlati