2014-04-08 2 views
1

친구 문자열 "3u->4+5=8"에 R.E @"^(.*)([0-9/+-^]+)=([0-9]+)$"을 적용하고 있습니다. Group[1]을 가져 오는 동안 "3u->4+"을 반환하고 Group[2]을 반환하면 "5"을 반환합니다. 나에 따르면 C# 정규식 - 텍스트를 특정 부분으로 나누십시오.

,

Group[0]="3u->4+5=8" 
Group[1]="3u->" 
Group[2]="4+5" 
Group[3]="8" 

는이 있어야합니다. 친절하게 도와주세요

+2

http://meta.stackexchange.com/questions/10647/how-do-i-write-a-good-title –

+0

태그 묶음을 반복하지 말고 적절한 제목을 입력하십시오. –

답변

3

문제는 욕심쟁이 수량 한정자 .*을 사용하여 가능한 모든 것을 먹어 치우려고 시도하는 것보다 발생합니다.

^(.*?)([0-9/+^-]+)=([0-9]+) 

이 전체 경기를 찾는 동안 적은 가능한 일치 .*?의 원인이됩니다 :

대신 게으른 한정 기호를 사용하여 정량은 예에서 4에서 중지됩니다.

또한 -은 문자 클래스 안에있는 특수 문자로, 처음에 입력해야하거나 끝 부분 ([...-]) 또는 [+-^]이 범위가되도록 이스케이프해야합니다. 다른 정규식처럼

우리의 정규식 (.*)([0-9/+-^]+)을 무슨 일


는 일치하는 항목을 반환하고자합니다. 그것을하기 위해서, 그것은 "길이가 다른 것, 적어도 [0-9/+-^] 범위 내의 캐릭터가 뒤따른 것"을 찾아야합니다. 3u->4+5 정규식에 도포 만이 규칙에 따라

제 뷰 매치에 수 : 제 (하나만 자리에서 제 1 그룹

  • 3u->4+, 5는 제 2 그룹에 대한을 필요 매치) 제
  • 01
  • 제 1 그룹 3u->4, +5
  • 3u->의 제 1 그룹,

그래서 어느 것이 일치해야합니까? 선택하는 어느 하나를 알고하기 위해

의 (휴리스틱 및 단순화 된) 규칙은 다음과 같습니다 * 정량이 욕심 경우

  • 는 항상 그것을 가장 할 수
  • 경우 일치하려고합니다 게으름 (따라서 *?을 사용하는 경우) 정규 표현식이 여전히 글로벌 일치를 반환하는 동안 가능한 한 일치 할 것입니다.

당신은 일반적인 기본 규칙과 미묘한 깊이에 더 설명되고있는 주제 here 또는 here에 자세한 내용을보실 수 있습니다.

+0

더 자세히 설명 할 수 있습니까? –

+0

@ user253900 : 내 답변을 수정했습니다. 명확 해 주시기 바랍니다. – Robin

+0

흠 감사합니다 Robin :) –

관련 문제