【问题标题】:Extracting a portion of a string then using it to match with other strings in Powershell提取字符串的一部分,然后使用它与 Powershell 中的其他字符串匹配
【发布时间】:2017-04-15 05:37:41
【问题描述】:

我之前曾向parsing a text file 寻求帮助,并且一直在为我的脚本使用此代码:

import-csv $File -header Tag,Date,Value|
  Where {$_.Tag -notmatch '(_His_|_Manual$)'}|
    Select-Object *,@{Name='Building';Expression={"{0} {1}" -f $($_.Tag -split '_')[1..2]}}|
      Format-table -Groupby Building -Property Tag,Date,Value

从那以后我意识到,虽然代码会过滤掉任何包含_His_Manual 的标签,但我还需要过滤掉与_Manual 关联的所有标签。例如,我的文本文件中存在以下标签:

L01_B111_BuildingName1_MainElectric_111A01ME_ALC,13-Apr-17 08:45,64075 L01_B111_BuildingName1_MainElectric_111A01ME_Cleansed,13-Apr-17 08:45,64075 L01_B111_BuildingName1_MainElectric_111A01ME_Consumption,13-Apr-17 08:45,10.4 L01_B333_BuildingName3_MainWater_333E02MW_Manual,1-Dec-16 18:00:00,4.380384E+07 L01_B333_BuildingName3_MainWater_333E02MW_Cleansed,1-Dec-16 18:00:00,4.380384E+07 L01_B333_BuildingName3_MainWater_333E02MW_Consumption,1-Dec-16 18:00:00,25.36

333E02MW_Manual 字符串将使用我当前的代码被排除,但我怎么能同时排除 333E02MW_Cleansed333E02MW_Consumption?我觉得我需要一些可以让我在每个 _Manual 实例之前提取 8 位代码的东西,然后用它来查找带有 {MatchingCode} 的任何其他字符串

xxx_xxxx_xxxxxxxxxxx_xxxxxxxxxx_MatchingCode_Cleansed
xxx_xxxx_xxxxxxxxxxx_xxxxxxxxxx_MatchingCode_Consumption

我知道有 -like -contains-match 运算符,并且我已经看到这些关于使用 substringsregex 的帖子,但是我如何提取 MatchingCode 以实际匹配某些内容? This post 似乎最接近我的目标,但我不确定如何将其应用于 PowerShell。

【问题讨论】:

    标签: powershell


    【解决方案1】:

    您可以找到以_Manual 结尾的每个标签,并创建一个匹配_Manual 之前任何部分的正则表达式模式。例如。

    $Data = Import-Csv -Path $File -Header Tag,Date,Value
    #Create regex that matches any prefixes that has a manual row (matches using the value before _Manual)
    $ExcludeManualPattern = ($Data | Foreach-Object { if($_.Tag -match '^(.*?)_Manual$') { [regex]::Escape($Matches[1]) } }) -join '|'
    
    $Data | Where-Object { $_.Tag -notmatch '_His_' -and $_.Tag -notmatch $ExcludeManualPattern } |
    Select-Object -Property *,@{Name='Building';Expression={"{0} {1}" -f $($_.Tag -split '_')[1..2]}}|
    Format-table -GroupBy Building -Property Tag,Date,Value
    

    【讨论】:

    • 我的初始脚本的不错扩展,+1
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-28
    • 1970-01-01
    • 1970-01-01
    • 2020-04-10
    • 1970-01-01
    • 2017-09-27
    • 1970-01-01
    相关资源
    最近更新 更多