我一直想弄清楚。如何使用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}
答案 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'