使用regex和Powershell从字符串中提取特定数据

use*_*401 13 regex powershell

我想从这个字符串中提取

blocked-process-report process 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"status ="susp ended" spid ="58" sbid ="0"ecid = "0"

以粗体显示的值,但仅为值或58.此值可以是不同的值,有时为80或1000等,但总是> 50.

我怎么能用正则表达式和豪华来做到这一点?

Jon*_*iss 32

快速又脏:

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

$string你上面提到的字符串在哪里 这将匹配任何具有spid ="somenumberhere"的字符串,并将该数字组成一个匹配的组,您可以使用该组进行提取$matches[1].

  • `.*` 将匹配该行之前和之后的任何内容,只有在使用 `'^.*spid="(\d+)".*$'` 时才真正需要 (2认同)
  • `.*` 通常不应在正则表达式中使用,结果可能是不可预测的并且性能缓慢,因为它会在回溯以查找正则表达式中的下一个模式之前匹配整个字符串。在这种特殊情况下,匹配只需要 `spid="(\d+)"` 。 (2认同)