时间:2017-11-14 20:50:49

标签: powershell escaping

我正在尝试解析网站上的特定数据。

$strings = $body.split(";")
$strings2 = $strings.Where({$_ -like ("*recordData[`"key`"]*")})

我发现方括号是罪魁祸首,我用

$strings2 = $strings.Where({$_ -like ("*recordData*")})

它工作正常,虽然返回的方式更多的结果,然后我需要。 有没有办法可以搜索“recordData [key]”

$ body只是返回网页的全部内容

感谢。

编辑: 根据要求,输入数据就像这样

rs.currentColumn = 0;
recordData["dataGridExtraRow"] = 0;
recordData["rownum"] = "0";

recordData["key"] = '3354087';

recordData["factory"] = "cr";

最后我需要3354087号码,但只需挑选出我需要的线路就是问题,之后我就可以把它拆开了。

但是,我最终使用了.contains,感谢您的建议。 我看到之后有点像脸。

2 个答案:

答案 0 :(得分:1)

如果您正在使用like运算符,那么您将遇到一个问题,即开放方括号,它是PowerShell中的通配符。见About_Wildcards

...
[] - Matches range of characters
...

用例就是这样会返回true。

"recordFata" -like "record[DF]ata"

因此,如果您要使用-like,则需要在单引号中使用反引号来转义括号。您可以通过使用其他方法以相同的方式避免这种情况。

其他选项

String .Contains()方法

"sdfafdrecordData[key]asdfasdfas".Contains("recordData[key]")

相当基本,大多数情况下无需担心特殊字符。

正则表达式

"sdfafdrecordData[key]asdfasdfas" -match "recordData\[key]"

请注意,方括号也是需要转义的正则表达式元字符。

答案 1 :(得分:1)

尝试使用单引号并使用反引号转义。

您还可以简化PowerShell语法的使用:

-V