2017-04-24 7 views
1

ファイル内の文字列をRegexで選択しています。私の問題は、Select-Stringは常にファイルの行全体を使用していることです。ここに私のコードは次のとおりです。私はラインからのみPD920FAを必要とする出力としてPowershellのSelect-String正規表現

[SPEC LOCATIONS] 
DV920_DataSource=Central Objects - DV920 
DV920_Package=DV920FA 
PD920_DataSource=Central Objects - PD920 
PD920_Package=PD920FA 
PS920_DataSource=Central Objects - PS920 
PS920_Package=PS920FA 
PY920_DataSource=Central Objects - PY920 
PY920_Package=PY920FA 

($a = Select-String -path C:\Users\boriv\Desktop\Patrick\regex\spec.ini -pattern "PD[0-9]{3}[A-Z]{2}\n") 

私spec.iniファイルには、次のようになります

PD920_Package = PD920FA

これ以外の方法として、Select-String以外の方法がありますか?

また、Whereオブジェクトを使用しようとしましたが、動作しませんでした。 Regex

+0

あなたは別の角度からこのに近づくことができる - 使用 '(<= ^? DV920_Package =)PD \ d {3} [AZ] {2} '行の先頭にある値が常に' DV920_Package = 'の後にある場合。文字列の末尾がテストされていることを確認するために、最後に '$'を追加してください。 –

答えて

1

あなたはGet-Content[regex]::match .NETメソッドを使用することができます:

私の正規表現はリンクがあり、ここで働く

[regex]::match((Get-Content spec.ini),"PD[0-9]{3}[A-Z]{2}").value 
+0

しかし、Get-Contentではこれから何も出力されません。 PD920_Package = PD920FA – Doggo

+0

そうですね、テストでは似たようですが、ソースファイルとは異なる形式でファイルを保存したと仮定しました。 PowerShellでは、何らかの理由で正規表現パターンが文字列の最初のPDと一致し、\ n(改行)文字とまったく一致しないように見えるという問題があります。私は正規表現の専門家ではないことを申し訳ありません。私は、正規表現がPowerShellでどのように動作しているかと、そのテストサイトでどのように動作するかの違いが問題だと思います。 –

+1

私はそれを理解しました、正規表現テスターサイトは、最初の一致後に停止しなかったことを意味するグローバルパターンフラグを使用していました。 PowerShellで.NETのメソッド '[regex] :: match'を使って同様のことができるようです。私はこれを表示するために私の答えを変更しました。 –