Powershell从字符串中获取所需的子字符串

时间:2015-04-09 03:06:03

标签: powershell

我有一个看起来像这样的字符串:

"Comments : @{id=15161772,we are happy with the service,likes=&÷€$:#,hsbdinsjsonsjbdjdjid}"

我想得到“我们对服务感到满意”这一部分。

我尝试过类似的事情:

$string ="Comments : @{id=15161772,we are happy with the service,likes=&÷€$:#,hsbdinsjsonsjbdjdjid}"
$string.split(",") | foreach {if(($_ -Notlike "*id=*" ) -and ($_ -Notlike "*likes=*")){$_ }}

我得到的结果为:

We are happy with the service
hsbdinsjsonsjbdjdjid

我希望只得到“我们对服务感到满意”。

3 个答案:

答案 0 :(得分:1)

如果您可以保证您要查找的项目不包含逗号,那么您只需查看逗号分隔字符串中的第二个元素。

$string.split(",")[1]

答案 1 :(得分:1)

我会选择RegEx选项...

$string ='Comments : @{id=15161772,we are happy with the service,likes=&÷€$:#,hsbdinsjsonsjbdjdjid}'
$string -replace ".*?=.*?,(.*?),likes=.*", "`$1"

输出您想要的文字,并且应该在第一个等号之后和,likes=之前返回所有内容。如果要捕获它,只需将其分配给变量,例如:

$Comment = $string -replace ".*?=.*?,(.*?),likes=.*", "`$1"

然后$Comment将包含字符串we are happy with the service

这应该比分割逗号更灵活。有关RegEx如何工作的示例和更多详细信息,请参阅:https://regex101.com/r/fK1oX6/1

答案 2 :(得分:1)

使用正则表达式分割:

$string = 'Comments : @{id=15161772,we are happy with the service,likes=&÷€$:#,hsbdinsjsonsjbdjdjid}'
($string -split 'id=\d+,|,likes=')[1]
we are happy with the service