从字符串中提取版本号,最佳方法?

时间:2019-05-03 13:58:21

标签: regex string powershell version

我有那个字符串:

<span class="cloud-browser-downloads__dl-row-chrome-container cloud-body-text__small">Chrome v. <span class="cloud-browser-downloads__dl-row-chrome-version">74.0.3729.131</span></span>

我只想要版本号。我想知道你们认为隔离它的最佳方法是什么。

现在我正在像这样通过REGEX进行操作:

-match "\d{1,}[\.]\d{1,}[\.]\d{1,}[\.]\d{1,}"

(1个或多个数字,点,1个或多个数字,点,1个或多个数字,点,1个或多个数字)

它工作得很好,但是如果他们要更改版本命名怎么办?

另一种查看方式是隔离

<span class="cloud-browser-downloads__dl-row-chrome-version">

</span>

只是在寻求最安全的方法来征求您的意见。

FYI:我知道我可以使用Invoke-Webrequest来获取实际元素,但是由于某些原因,该命令会挂在该特定的Google URL上,因此我不得不使用InternetExplorer.Application COM对象来获取源代码。

2 个答案:

答案 0 :(得分:4)

将您的字符串转换为xml:

$XML = [XML]'<span class="cloud-browser-downloads__dl-row-chrome-container cloud-body-text__small">Chrome v. <span class="cloud-browser-downloads__dl-row-chrome-version">74.0.3729.131</span></span>'

> [version]$xml.span.span.'#text'

Major  Minor  Build  Revision
-----  -----  -----  --------
74     0      3729   131

答案 1 :(得分:1)

您可以与-match一起使用。

$str =  "<span class=cloud-browser-downloads__dl-row-chrome-container cloud-body- 
text__small>Chrome v. <span class=cloud-browser-downloads__dl-row-chrome- 
  version>74.0.3729.131</span></span>"
 $regex = [regex] "\d{1,}[\.]\d{1,}[\.]\d{1,}[\.]\d{1,}"

$found = $str -match $regex

if ($found) {
 $ip = $matches[0]
}