2014-09-25 2 views
0

다음과 같이 오류 코드를 나타내는 텍스트 파일이 있습니다. 재 학습 정규 표현식에서 연습으로 사용하고 싶습니다. (저는 정규 표현식을 몇 년 전에 알고 모든 지식을 증발 시켰습니다.) 사양은 다음과 같습니다.Powershell에서 regex를 사용하여 텍스트 파일을 구문 분석하는 데 도움이 필요합니다.

"public const int "으로 시작하는 줄의 데이터 만 필요합니다. 나는 get-content를 사용하고, 루프의 각 라인을 읽고, contains 검색을 수행함으로써이 부분을 찾아 냈다. 더 좋은 방법이 있다면 나는 다 년이다.

다음 줄 가정 :

  • TranCodeDesc = TRANSACTION_E_INVALID_ACCOUNT_STATUS
  • TranCode = 141080
  • TranDesc = 잘못된 계정 상태
: 나는 다음과 같은 세 개의 필드가 필요

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

     " 

이와 같이 선을 파싱하는 방법을 설명하는 자습서가 있다면 나는 모든 귀뿐입니다.

감사합니다,

"  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

나는이 알아 낸 : $Matches.TranCode = BDK_E_TOKEN_ALREADY_BLACKLISTED $Matches.CPReturnCode = 5010 $Matches.TranDesc = The token is already blacklisted.

에서

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

결과 나는이 식 사고 방식의 이야기 작동 :

-TranCode는 모두 "public const int"다음의 문자입니다.

-Skip "="(등호 및 공백)까지 임의의 문자 수.

-CPReturnCode는 임의의 자릿수 (\ d +)와 같습니다.

(큰 따옴표)

0
(?=.*public const int).*?(\w+)\s*(?==).\s*(\d+).*?"([\w\s]+) 
' "'

-TranDesc 다음까지 문자의 수와 동일 (큰 따옴표) '"'다음 때까지 문자의 수를 -skip

시도해보십시오. 캡쳐를 잡으십시오. 데모를보십시오.

http://regex101.com/r/lS5tT3/35

관련 문제