2014-09-25 62 views
0

我有一個文本文件表示錯誤代碼,如下所示。我想用它作爲再學習正則表達式的練習(我曾經在幾年前知道正則表達式和所有知識的蒸發)。規格如下需要幫助在PowerShell中使用正則表達式解析文本文件

我只需要以"public const int "開頭的行的數據。我通過使用get-content,循環讀取每一行,並執行包含搜索來計算這部分內容。如果有更好的方式,我是所有年份。

假設下面一行:

"  public const int TRANSACTION_E_INVALID_ACCOUNT_STATUS = 141080; //""Invalid account status""  

     " 

我需要以下三個領域:

  • TranCodeDesc = TRANSACTION_E_INVALID_ACCOUNT_STATUS
  • TRANCODE = 141080
  • TranDesc =無效帳戶狀態

如果有一個教程解釋如何解析這樣的一條線我也是耳朵。

感謝,

尼克

"  public const int TRANSACTION_E_INVALID_ACCOUNT_STATUS = 141080; //""Invalid account status""     " 
"  [SuppressMessage(""xxxx.Naming"" "" """"CA1707:IdentifiersShouldNotContainUnderscores"""")]""    " 
"  [SuppressMessage(""xxxx.Naming"" "" """"CA1709:IdentifiersShouldBeCasedCorrectly"""""" "" MessageId = """"TRANSACTION"""")]""   " 
"  [SuppressMessage(""xxxx.Naming"" "" """"CA1709:IdentifiersShouldBeCasedCorrectly"""""" "" MessageId = """"RACE"""")]""   " 
"  [SuppressMessage(""xxxx.Naming"" "" """"CA1709:IdentifiersShouldBeCasedCorrectly"""""" "" MessageId = """"CONDITION"""")]""   " 
"  public const int TRANSACTION_E_TRANSACTION_RACE_CONDITION = 141081; //""Same transaction was processed by other thread""     " 
"  [SuppressMessage(""xxxx.Naming"" "" """"CA1709:IdentifiersShouldBeCasedCorrectly"""""" "" MessageId = """"UNSUPPORTED"""")]""   " 
"  [SuppressMessage(""xxxx.Naming"" "" """"CA1707:IdentifiersShouldNotContainUnderscores"""")]""    " 
"  [SuppressMessage(""xxxx.Naming"" "" """"CA1709:IdentifiersShouldBeCasedCorrectly"""""" "" MessageId = """"TRANSACTION"""")]""   " 
"  [SuppressMessage(""xxxx.Naming"" "" """"CA1709:IdentifiersShouldBeCasedCorrectly"""""" "" MessageId = """"OPERATION"""")]""   " 

回答

0

我想通了這一點:

$line -match 'public const int (?<TranCode>.*).*= (?<CPReturnCode>\d+).*"(?<TranDesc>.*)"'

結果 $Matches.TranCode = BDK_E_TOKEN_ALREADY_BLACKLISTED $Matches.CPReturnCode = 5010 $Matches.TranDesc = The token is already blacklisted.

的如何,我認爲這表達的故事作品:

-TranCode是「public const int」之後的所有字符。

-Skip任意數量的字符,直到「=」(等號和空格)。

-CPReturnCode然後等於任意位數(\ d +)。

-Skip任何數量的字符,直到下一個' 「(雙引號)

-TranDesc等於直到下一次任意數目的字符 '」'(雙引號)

尼克