Regex 正则表达式以匹配时区标题字符串的小时部分

Regex 正则表达式以匹配时区标题字符串的小时部分,regex,powershell,timezone,Regex,Powershell,Timezone,我正在使用PowerShell查询远程服务器的时区 -编辑:为了澄清,我想为自己掉进XY陷阱而道歉。我有一个等待重新启动的服务器列表。在我的列表中,我有一个维护窗口(例如KWA-SRV-Patching-Prod-Sun 2:00),它在当地时间列出。在本例中,its(UTC+10:00)位于堪培拉、墨尔本、悉尼。这里是我迷路的地方,我正在寻找一种方法,使用PowerShell获取维护窗口(Sun 2:00)以及服务器的时区,该时区将用于生成服务器可以重新启动的本地时间 gwmi-类win32_

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

-编辑:为了澄清,我想为自己掉进XY陷阱而道歉。我有一个等待重新启动的服务器列表。在我的列表中,我有一个维护窗口(例如KWA-SRV-Patching-Prod-Sun 2:00),它在当地时间列出。在本例中,its(UTC+10:00)位于堪培拉、墨尔本、悉尼。这里是我迷路的地方,我正在寻找一种方法,使用PowerShell获取维护窗口(Sun 2:00)以及服务器的时区,该时区将用于生成服务器可以重新启动的本地时间

gwmi-类win32_时区
,返回标题
(UTC-05:00)东部时间(美国和加拿大)
(UTC+10:00)堪培拉、墨尔本、悉尼

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

我的尝试,在PowerShell控制台中。谁能帮我弄一下这个正则表达式吗

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

0600

您不希望匹配非零数字。如果你替换了所有的零,你只能从你期望输出的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

您不希望匹配非零数字。如果你替换了所有的零,你只能从你期望输出的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

使用
-替换

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

使用
-替换

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

我闻起来像。你到底想在这里做什么?如果您需要时区偏差,那么直接从
bias
属性获取即可。不要用正则表达式从
标题中提取它。(参见示例)。还要确保您认识到标题字符串中的偏移量只是标准偏移量。它不会改变以反映DST。抱歉,这个问题的目的是提供一个转换为本地时区的时间(PST)。例如,东部时间下午6点重新启动发生在太平洋时间下午3点。此外,在DST中,本地时区(太平洋)也会改变并满足DST的变化,或者我的想法是错误的?我觉得这很像。你到底想在这里做什么?如果您需要时区偏差,那么直接从
bias
属性获取即可。不要用正则表达式从
标题中提取它。(参见示例)。还要确保您认识到标题字符串中的偏移量只是标准偏移量。它不会改变以反映DST。抱歉,这个问题的目的是提供一个转换为本地时区的时间(PST)。例如,东部时间下午6点重新启动发生在太平洋时间下午3点。此外,在DST中,本地时区(太平洋)也会发生变化,并满足DST的变化,或者我的想法不正确?有些结果是GMT而不是UTC。我放弃了这种方法,只是简单地匹配服务器名称并手动验证时区,然后简单地静态编码适当的小时偏移量。另外,我发现一些服务器没有正确的时区设置加上一两个设置。正则表达式的第一条规则:“了解您的数据”。一些结果使用GMT而不是UTC。我放弃了这种方法,只是简单地匹配服务器名称并手动验证时区,然后简单地静态编码适当的小时偏移量。另外,我发现一些服务器没有正确的时区设置加上一两个设置