2010-02-16 2 views
0

요청, 여러분의 귀중한 시간을 인접한 구문 분석 ..정규 표현식은 정규 표현식을 사용하여 하위 문자열 값을 찾기 위해 저를 돕는 키 - 값 쌍을

이것은 내가를 추출 할 수 있어야 내 입력

"ADMIN:YESEXT:NOBAT:NOBOM:NO" 

입니다 문자열 ^\s?(?:ADMIN:),369 : 출력

ADMIN:YES 
EXT:NO 
BAT:NO 
BOM:NO 

에 일을 다음 난 그냥 ADMIN를 얻기 위해 다음과 같은 정규 표현식을 사용정규식을 수정하여 필요한 출력을 얻는 방법

답변

1

콜론 다음의 값은 항상 YES 또는 NO이 될 것입니다. 나는 $1는 재산과 $2 값입니다 어디

/([^:]+):(YES|NO)/g 

같은 것을 원하는,라고 말하고 싶지만.

+0

이 질문은 C#으로 태그가 지정되어 있으며이 태그는 서식을 지정하는 자바 스크립트 정규식과 글로벌 플래그 접미사 – rrrr

+0

처럼 보입니다. 태그를 발견하지 못했음을 인정해야합니다. 난 그냥 정규식 질문으로 취급하고 같은 대답했다. 나는 이것이 구문보다 정규식 전략의 문제에 더 많이 있다고 주장 할 것이다. –

1

이 정규식 일치 시도 할 수 :

(.*?):(YES|NO) 
+0

Nice. 이 정규 표현식은 lazy quantifer (. * 뒤에 물음표)를 사용합니다.올바른 콜론 문자를 찾으십시오. 하지만이 정규 표현식에는 작은 실수가 있습니다. 별표 (*)는 (YES | NO)뿐만 아니라 전체 표현식에 적용해야합니다. "((*?) :(YES | NO)) *" – ardsrk

1

([^:]+):(YES|NO) 할 것입니다. YES 또는 : 이것은 다음에 모든 텍스트를 일치 NO

2

내가 사용하는 것 :

(\w+):(YES:NO) 
0
(ADMIN|EXT|BAT|BOM):(YES|NO) 
0

당신이 명시 적으로 순서대로 값을 얻고 싶은 경우에, 당신은 사용할 수 있습니다

를 나는하려면

\w*:(NO|YES) 

\w*  - match as many word-charachters as possible 
:  - match a colon 
(NO|YES) - match YES or NO 

에 대한

^\s?(?:ADMIN:(YES|NO))(?:EXT:(YES|NO))(?:BAT:(YES|NO))(?:BOM:(YES|NO)) 
0

갈 것

Regex regexObj = new Regex(@"\w*:(NO|YES)"); 
Match matchResults = regexObj.Match(theStringToSearch); 
while (matchResults.Success) { 
    //take us of matchResults.... 

    matchResults = matchResults.NextMatch(); 
} 
0

@soulmerge에 의해 제안 정규 표현식은 게으른 quantifer 사용하여 모든 결과를 얻을, 당신은 같은 것을 사용할 수 있습니다 (후 물음표 *.). 올바른 콜론 문자를 찾으십시오. 그러나이 정규 표현식은 작은 실수가 있습니다. 별표 (*)는 (YES | NO)뿐만 아니라 전체 표현식에 적용되어야합니다.

그래서이 될 것입니다 :

((.*?):(YES|NO))* 

나는 그의 대답에 언급을 시도했지만 정규 표현식이 제대로 표시 점점되지 않았습니다.

+0

한 문자열에서 전체 문자열과 일치하지만 @ soulmerge의 정규식 (다른 대부분의 경우와 같이)은 토큰 반복을 의미합니다 'Matches()'메쏘드 나'Match()'를 반복적으로 호출한다. 그런데 포스트와 주석 모두에서 코드를 포맷팅하기 위해 백틱을 사용할 수 있습니다. –

+0

오케이. 알았다. 나는 최근에 그런 실수를 저질렀습니다. 다행스럽게도 SO 사용자는 내 답변을 혼란스럽게하지 않을 정도로 관대하지만 실수 만 지적합니다. 감사. – ardsrk

0

원하는대로이어서 사전 키/값 쌍을 덤프이 한 줄

string Content = @"ADMIN:YESEXT:NOBAT:NOBOM:NO"; 
string Pattern = @"([^:]+):(YES|NO)"; 

Dictionary<string, string> dict = Regex.Matches(Content, Pattern).Cast<Match>() 
    .ToDictionary(m => m.Groups[1].Value, m => m.Groups[2].Value); 

보십시오.