2014-09-25 68 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等于直到下一次任意数目的字符 '”'(双引号)

尼克