【问题标题】:Powershell specific character not match for functionPowershell 特定字符与函数不匹配
【发布时间】:2020-03-23 01:09:59
【问题描述】:

我正在尝试创建一个过滤器以仅在第 4 位的字符为 "W", "X", "Y", "Z" 的情况下运行 IF 子句。

目前的代码如下所示:

$name= "123Y567"

if ($name.notcontains("Y"))
{
 "Action 1"
}
  else
{               
  "Action 2"
 }
}

我也试过了

$name= "123Y567"

if ($name -notmatch (/^.{4}["Y"]/))
{
 "Action 1"
}
  else
{               
  "Action 2"
 }
}

什么是最好的解决方案?但总体上是使用脚本和 Powershell 的新功能。

【问题讨论】:

  • if ($name -cmatch '^.{3}[W-Z]') ?
  • 可以将字符串视为字符数组。你可以用'asdfgh'[3] 得到f——这是第4个字母,因为数组从零开始。 [咧嘴]

标签: regex powershell if-statement scripting


【解决方案1】:

没有正则表达式,正如 Lee_Daily 已经建议的那样,在第 4 个字符上使用 switch

$name= "123Y567"
switch ($name[3]) {
    'W' { Action_1 }
    'X' { Action_2 }
    'Y' { Action_3 }
    'Z' { Action_4 }
}

或者,如果要执行的操作对于任何字符 'W'、'X'、'Y'、'Z' 都是相同的:

$name= "123Y567"
if ('W','X','Y','Z' -contains $name[3] ) { Action_1 }

【讨论】:

    【解决方案2】:

    如果您想使用正则表达式来检查第四个字符是否是自定义范围/集合中的字符,您可以使用

    if ($name -cmatch '^.{3}[W-Z]')
    

    注意 PS 正则表达式匹配 -match 不区分大小写,您需要使用 -cmatch 使其区分大小写。

    模式匹配

    • ^ - 字符串开头
    • .{3} - 除换行符以外的任意 3 个字符
    • [W-Z] - WXYZ

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-20
      • 1970-01-01
      • 1970-01-01
      • 2019-08-01
      • 2019-02-08
      • 2012-08-07
      相关资源
      最近更新 更多