【问题标题】:PowerShell wildcard in the middle of a string字符串中间的 PowerShell 通配符
【发布时间】:2014-04-02 17:25:06
【问题描述】:

我正在从文本文件中获取一些内容并将其加载到变量中。

一旦我有了数据,我就会遍历每一行数据,不包括像这样添加到我的数组中的一些值..

foreach($row in $data)
{
    if($row)
    {
        Write-Host $row
        [Array]$index = $row.Split(" ") -ne "[needWildCardHere]" -ne "Value2" -ne "Value3" -ne "Value4" -ne "Value5"
    }
}

与我给出的每个字符串匹配的每个值都不会添加到数组中。

请注意我在这里的第一个值[Array]$index = $row.Split(" ") -ne "[needWildCardHere]"

我在$data$row 中有一堆值,它们的时间戳类似于:

[10:49:32] [09:32:57] [06:17:15] [06:17:15]

我可以在括号之间放一个通配符,这样我就不会在我的数组中添加任何具有 [brackets] 的值吗?

如果有不清楚的地方可以随时问我,

谢谢

【问题讨论】:

    标签: powershell wildcard


    【解决方案1】:

    如果要使用通配符匹配,则需要将使用-ne 改为-notlike。

    如果你想使用正则表达式,你会使用 -notmatch。

    见:

     Get-Help about_comparison_operators
    

    一个例子:

     [Array]$index = $row.Split(" ") -notlike "*`[*`]*" -ne "Value2" -ne "Value3" -ne "Value4" -ne "Value5"
    

    注意:方括号被认为是通配符集的一部分,因此要从字面上匹配它们,需要使用反引号进行转义。

    【讨论】:

    • 请花时间阅读比较运算符的帮助。它会为您节省很多时间和很多问题。
    【解决方案2】:

    尝试-notmatch "\[.*\]" 而不是-ne

    【讨论】:

    • 我尝试将它添加到我的代码行中,但没有任何改变。我尝试将我的所有 -ne 更改为所有 -notmatch 和 -notlike。仍然将值添加到我的数组中
    • 我撒谎了,我打印出错误的变量来查看我的结果。是的,我尝试了"\[.*\]",但它不起作用。让它与 -notmatch 一起使用,谢谢!
    【解决方案3】:

    就我个人而言,我会先拆分然后过滤,因为我认为它似乎提供了更通用的过滤:

    $Exclusions = @("value1","value2","value3")
    gc c:\temp\test.txt |%{$_.split(" ") |?{$_ -notin $exclusions -and $_ -notmatch "\[.*?]" -and !([string]::IsNullOrWhiteSpace($_))}}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-10-08
      • 1970-01-01
      • 1970-01-01
      • 2018-12-26
      • 2020-11-21
      • 2014-06-14
      相关资源
      最近更新 更多