2010-04-07 5 views
1

정규식 문자열에서 일치 항목을 반환하고 싶습니다. 정규식 문자열 :.NET 정규식 파싱을위한 정규식

(?<TICKER>[A-Z]+)(?<SPACE>\\s)(?<MONTH_ALPHA_ABBREV>Jan|Feb|Mar|Apr|May|Jun|Jul|Sep|Oct|Nov|Dec)(?<SPACE>\\s)(?<DAY>\\d+)(?<SPACE>\\s)(?<YEAR_LONG>[2][0][0-9][0-9])(?<SPACE>\\s)(?<STRIKE_DOLLAR>\\d+(?=[.]))[.](?<STRIKE_DECIMAL>(?<=[.])\\d+)(?<SPACE>\\s)(?<PUTCALL_LONG>Call|Put) 

그리고 개방과 폐쇄 괄호의 외부 (대괄호 포함) 대괄호 내의 항목의 그룹 이름을 모두와 모두 일치 싶어. 이 정규식을 가지고 :

((?<=[<])([A-Z]|[_])+(?=[>]))|(\\[.\\]) 

그러나 이것은 괄호 안에 대괄호 항목을 반환합니다. 이러한 내가 상단에있는 정규식에서 원하는 경기입니다 구체적으로 (이 어떤 정규식에 대해 유연하게 할 필요가 염두에 두어야) : 당신이 당신의 정규식과 일치하는 경우

TICKER 
SPACE 
MONTH_ALPHA_ABBREV 
SPACE 
DAY 
SPACE 
YEAR_LONG 
SPACE 
STRIKE_DOLLAR 
[.] 
STRIKE_DECIMAL 
SPACE 
PUTCALL_LONG 
+0

@Chris : FYI, 정규 표현식은 C# 언어의 일부가 아니며 .NET Framework의 일부입니다. –

+2

"메타 정규식"! 이봐 요, 당신은 두통을 앓고 있습니다 ... –

+0

정규 표현식은 정규 언어를 기술하고 있습니까? 즉, 그들 자신은 * 정규 언어가 될 수 없다는 것을 의미합니다. 따라서 정규 표현식으로 정규 표현식을 파싱하는 것은 불가능합니다. – Tomalak

답변

2
((?<=[<])([A-Z]|[_])+(?=[>]))|(?<!\([^\)]*)\[[^\]]+\] 

@"" 표기법을 사용합니다. 이 강아지는 충분히 읽을 수 없습니다.

0

당신이 RegexOptions.ExplicitCapture를 포함하도록 옵션을 설정할 수 있습니다 명명 된 그룹 만 캡쳐하면 일반적으로 괄호 안에있는 모든 것이 캡처됩니다. 그런 다음이 형식 (?<captureGroupName>[insertRegExHere])을 사용하여 모든 캡처 그룹의 이름을 지정할 수 있습니다. 이것은 당신이 좋아하는 것을 포착하고 분별있는 이름을 사용할 수있게합니다. 당신이 (당신이 당신의 예제 코드에서와 같이) 백 슬래시를 이스케이프 할 필요가 없습니다 또한