我已将整个网页提取为文本,并将该文本分配给变量。现在我需要选择该文本的一部分并将其分配给另一个变量。让我们说,我的文字是:
Note: Your feedback is very important to us, however, we do not
respond to individual submissions through this channel. If you require
support, please visit the Safety & Security Center. Follow: Change log
for version 1.211.2457.0 This page shows you what's changed in the
most recent definitions update for Microsoft antimalware and
antispyware software.
You can also see changes in the last 20 updates from the Change
definition version menu on the right.
The latest update is:
1.211.2457.0
Download the latest update.
 New definitions (?)
Antimalware (Antivirus + Antispyware)
我希望将以下文本分配给变量
1.211.2457.0
我现在的代码是
$URI = "http://www.example.com/mynewpage"
$HTML = Invoke-WebRequest -Uri $URI
$WebPageText = ($HTML.ParsedHtml.getElementsByTagName("div") | Where-Object{$_.className -eq "span bp0-col-1-1 bp1-col-1-1 bp2-col-1-1 bp3-col-1-1"}).innerText
我试过了Select-String -SimpleMatch "The latest update is:*Download the latest update." -InputObject $WebPageText
,但我很确定这是错的。
我是PowerShell脚本的新手。如果我错过了一些明显的东西,请原谅我。
提前谢谢!
答案 0 :(得分:4)
SimpleMatch
会忽略任何正则表达式元字符。它也不允许任何通配符。来自TechNet:
使用简单匹配而不是正则表达式匹配。在简单匹配中,Select-String在输入中搜索Pattern参数中的文本。 它不会将Pattern参数的值解释为正则表达式语句
您可以使用正则表达式查找字符串,其中该行仅包含数字和句点:"^[\d\.]+$"
。
$version = ($WebPageText | Select-String "^[\d\.]+$").Matches.Value
可能会有更多人返回,因此您可能需要考虑到这一点。
如果您想要更具针对性(但无法保证唯一结果),您可以使用-match
运算符。
If(($WebPageText | out-string) -match "(?sm)The latest update is:\s+(.*?)\s+Download the latest update"){
$version = $Matches[1]
}