从字符串的中间提取变量值

时间:2013-04-22 17:30:24

标签: regex powershell

我一直想弄清楚。如何使用powershell从以下字符串中获取PID值?我认为REGEX是要走的路,但我无法弄清楚语法。 值得一提的是除了PID之外的所有东西都将保持不变。

    $foo = <VALUE>I am just a string and the string is the thing. PID:25973. After this do that and blah blah.</VALUE>

我在正则表达式中尝试了以下内容

[regex]::Matches($foo, 'PID:.*') | % {$_.Captures[0].Groups[1].value}
[regex]::Matches($foo, 'PID:*?>') | % {$_.Captures[0].Groups[1].value}
[regex]::Matches($foo, 'PID:*?>') | % {$_.Captures[0].Groups[1].value}
[regex]::Matches($foo, 'PID:*?>(.+).') | % {$_.Captures[0].Groups[1].value}

2 个答案:

答案 0 :(得分:3)

对于正则表达式,您需要指出您要查找的部分之前和之后的内容。 PID:.*将找到从PID到字符串末尾的所有内容。

要使用捕获组,您需要在正则表达式中包含一些(),它们定义了一个组。

所以试试这个尺寸:

[regex]::Matches($foo,'PID:(\d+)') | % {$_.Captures[0].Groups[1].value}

我正在使用PID:(\d+)的正则表达式。 \d+表示“一个或多个数字”。围绕(\d+)的括号将其标识为我可以使用Captures[0].Groups[1]访问的群组。

答案 1 :(得分:1)

这是另一种选择。基本上它用第一个捕获组替换了所有东西(这是'pid:':

之后的数字
$foo -replace '^.+PID:(\d+).+$','$1'