正则表达式匹配时区标题字符串

时间:2016-03-12 03:42:28

标签: regex powershell timezone

我使用PowerShell查询远程服务器的时区。

-edit:澄清一下,我想在前面道歉,因为它陷入了XY陷阱。我有一个正在等待重启的服务器列表。在我的列表中,我已经获得了本地时间列出的维护窗口(例如KWA-SRV-Patching-Prod-Sun 2:00)。在这个例子中,它(UTC + 10:00)堪培拉,墨尔本,悉尼。这是我迷路的地方,我正在寻找一种方法,使用PowerShell来获取维护窗口(Sun 2:00)以及来自服务器的TimeZone,它将用于生成服务器可以重新启动的本地时间。

gwmi -Class win32_timezone返回标题(UTC-05:00) Eastern Time (US & Canada)(UTC+10:00) Canberra, Melbourne, Sydney

我一直在寻找一些正则表达式以获取非零数字,在上面的示例中我需要返回5和10.我发现的每个示例都不是PowerShell因此我很难让这些示例在PowerShell中运行。这个正则表达式的原因是使用Get-Date并添加小时以获得正确的远程时区时间。

我的尝试,在PowerShell控制台中。有人能用这个正则表达式帮助我吗?

"(UTC-06:00) Central Time (US & Canada)" -replace '[^\p{Nd}]'

0600

2 个答案:

答案 0 :(得分:1)

您不希望匹配非零数字。如果你替换了所有的零,那么你只能从输出的10个中得到1。

您正在尝试匹配小时部分。我想你可能会以另一种方式得到这个但是你可以使用的一个正则表达式是匹配整个时间但是捕获组中的小时

(gwmi -Class win32_timezone).Caption -match "(\d{2}):\d{2}"
$matches[1]

对于这两个例子,这将返回05和10。如果您需要这些值是真正的数字,则转换为[int]

如果您计划将此用于时间操作,那么现在您会遇到问题,因为单独的数字不能为您提供偏移量。你也需要匹配标志。

(gwmi -Class win32_timezone).Caption -match "(.\d{2}):\d{2}"
[int]$matches[1]

匹配数字和前面的字符会让我们看到标志。使用示例,转换为[int]将获得-5和10。

答案 1 :(得分:1)

使用-replace

'(UTC-06:00) Central Time (US & Canada)' -replace '\(UTC-(\d\d).+','$1' -as [int]