2016-06-10 3 views
0

문자열에서 그룹으로 값을 추출하려고합니다. 내 정규식 내가 경기를 얻고 있지만 그룹이 마지막 5 자리를 얻지 못하고있다문자열 끝의 정규 표현식이 일치하지 않습니다.

string str = @"DEMOV 1'07"" MOT Lifestyle 503080 Pure Rain Nozzle Feb 13 472000"; 

const string type = @"(?<type>\w+)"; 
const string minutes = @"((?<minutes>\d+)\')?"; 
const string seconds = @"((?<seconds>\d+)\"")?"; 
const string body = @"(?<body>.+)"; 
const string id = @"(?<id>\s\d{6})?"; 

var pattern1 = String.Format(@"^{0}(?:\s\w+)?\s({1}{2}|{1}|{2})\s?{3}{4}$", type, minutes, seconds, body, id); 
var m1 = Regex.Match(str, pattern1); 

입니다.

아무도 내가 여기서 뭘 잘못하고 있다고 말할 수 있습니까?

내가 얻는 결과는 아래에서 확인하십시오.

enter image description here

+0

' . +'욕심이 많으므로 이미 해당 숫자와 일치하므로 선택적 그룹이 일치하지 않습니다. lazy matching에'. +? '를 사용할 수 있습니다. –

+0

예. 그것은 효과가 있었다. 감사합니다. –

답변

1

비 욕심 버전 (body에 대한 .+?를 사용)를 사용하고, id 그룹에 공백을 추가하지 않습니다 행동에

const string body = @"(?<body>.+?)"; 
const string id = @"\s(?<id>\d{6})?"; 

:로 https://dotnetfiddle.net/L1yL3C

+0

예. 감사. 그룹의 가치를 어떻게 얻을 수 있습니까? ID의 그룹 값을 얻으려면 어떻게해야합니까? –

+0

나는 그것을 이해했다. var min = m1.Groups [ "minutes"]. 값; –

+0

'm1.Groups [ "id"]' – Jcl

관련 문제