2017-07-12 4 views
1

正規表現でマッチするエントリが1行だけであれば、powershellスクリプトは正確に動作しますが、期待されています。 [値]タブで、出力は2つの値を持つのSystem.Object []で構成ファイルのpowershellの各行の同じグループから複数のキャプチャを表示することができません

$FILE_RE = '^[^\:]*[^\.txt:]' 
$TEXT_RE = '"(.*?)"' 
$TEXT = (Get-Content .\masterfile.txt).ToUpper() | 
       ForEach-Object { 
        New-Object psobject -Property @{ 
         fileName = [regex]::Matches($_, $FILE_RE).Value 
         Value = [regex]::Matches($_, $TEXT_RE).value 
        } 
       } 
     $TEXT | Select-Object fileName , Value | Sort-Object * -Unique | 
     Export-Csv TEXT.CSV -NoTypeInformation` 

データと正規表現can be found here. 対応 - :私はこれを使用しています。 System.Object []と対応するファイル名が最初の列にあるすべてのエントリを表示する方法。 意図した出力は次のようになります -

fileName Value 
FILE1.TXT VALUE1 
FILE1.TXT VALUE2 
FILE2.TXT VALUE3 
FILE2.TXT TEST STRING1 
FILE3.TXT VALUE4 
FILE3.TXT 3456789 
FILE4.TXT VALUE5 
FILE4.TXT TEXT1 
FILE5.TXT VALUE6 
FILE5.TXT LOREM IPSUM 
FILE6.TXT VALUE7 
+0

:中間$テキスト

  • を削除

    • は、周囲の"

    $FILE_RE = '^[^:]+' $TEXT_RE = '"([^ ].+?)"' (Get-Content .\masterfile.txt).ToUpper() | ForEach-Object { $File = [regex]::Matches($_, $FILE_RE).Value ForEach ($Value in ([regex]::Matches($_, $TEXT_RE).value)) { New-Object psobject -Property @{ fileName = $File Value = $Value.Trim('"') } } } | Select-Object fileName , Value | Sort-Object * -Unique | Export-Csv .\TEXT.CSV -NoTypeInformation Import-Csv .\TEXT.CSV 

  • 値からのサンプル出力をトリミングする必要がありました。あなたはより良い単一のRegExが必要です。 – LotPings

    +0

    @LotPingsを意図した出力に更新 – n00b

    答えて

    1

    ファイルを保存し、発見を反復処理する必要がある行あたり$ TEXT_REのいくつかの発見があるので。あなたは、あなたの期待どおりの結果が表示されるはずです

    fileName Value 
    -------- ----- 
    FILE1.TXT VALUE1 
    FILE1.TXT VALUE2 
    FILE2.TXT TEST STRING1 
    FILE2.TXT VALUE3 
    FILE3.TXT 3456789 
    FILE3.TXT VALUE4 
    FILE4.TXT TEXT1 
    FILE4.TXT VALUE5 
    FILE5.TXT LOREM IPSUM 
    FILE5.TXT VALUE6 
    FILE6.TXT VALUE7 
    
    関連する問題