2014-10-01 5 views
0

내가하는 데이터베이스 쿼리의 결과를 가지고 결과 단지 DataBlob 멤버 그것은 아주 잘 보일 수 있습니다정규식 GET 그룹, n은

를 설정 한 같은 :

<IK/12322>1354654 16/MAY/2014 18:01:01 - 20:01:01 

그래서, 나는 다른 회원을 채우기 위해 필요하고, '각'대표로 그렇게하고 싶습니다 :

results.Each(f => f.FirstID = int.Parse(Regex.Match(f.DataBlob, @"\d+").Value)); 
results.Each(f => f.SecondNum = int.Parse(Regex.Match(f.DataBlob, @"\d+").Value)); 
results.Each(f => f.ThirdDate = DateTime.Parse(Regex.Match(f.DataBlob, @"\d+").Value)); 
results.Each(f => f.FourthTime = Regex.Match(f.DataBlob, @"\d+").Value)); 
results.Each(f => f.FifthTime = Regex.Match(f.DataBlob, @"\d+").Value)); 

글쎄, 당신이 상상할 수있는, 정규식 표현이 첫 번째 정수에 일했다.

하지만 잠깐! Regex를 사용하여 필요한 모든 그룹을 찾을 수 있습니다.

(\d+)\>(\d+) (\d+\/[a-zA-Z]+\/\d+) (\d+\:\d+\:\d+) - (\d+\:\d+\:\d+) 

이렇게하면 필요한 모든 항목이 성공적으로 그룹화됩니다.

그러나 여기에 SecondNum의 두 번째 정규식 그룹 항목, ThirdDate의 세 번째 정규식 그룹 항목, FourthTime의 네 번째 정규식 그룹 항목 및 FifthTime의 다섯 번째 정규식 그룹 항목은 어떻게됩니까?

내가

(\d+)\>(\d+) (\d+\/[a-zA-Z]+\/\d+) (\d+\:\d+\:\d+) - (\d+\:\d+\:\d+){0} 

을하려고 할 때 내가 처음 (영차) 항목을하지 않습니다.

그룹스에서 첫 번째 등 항목을 가져 오려면 어떻게해야합니까? 당신이 할 수 있도록

results.Each(f => f.SecondNum = int.Parse(Regex.Match(f.DataBlob, @"????").Value)); 

답변

-1

당신은 다른 그룹을 캡처 먼저 전체 문자열을 구문 분석해야합니다

string pattern = @"(\d+)\>(\d+) (\d+\/[a-zA-Z]+\/\d+) (\d+\:\d+\:\d+) - (\d+\:\d+\:\d+)"; 
Match m = Regex.Match(f.DataBlob, pattern); 
// You can then refer to the matched group this way: 
// m.Groups[1] = 12322 
// m.Groups[2] = 1354654 
// ...etc 
Group g = m.Groups[2]; 
// Then parse into integer 

당신을 캡처 그룹이 1에서 시작주의, 0 대신 할 수도 예 : here을 살펴보십시오.

+0

목록에서 사용할 수 없습니다. Obj.Each. 그 질문에 언급되었습니다. –

+0

사실, 당신의 답은 내가 얼마나 효율적이지 않은지 생각하게했습니다 ... 이제는 모든 항목의 루프에서 하나의 정규식을 수행합니다 ... 그러나 나는 결과를 호출 할 수 있습니다. 각 (f => f.SecondNum = int .Parse (Regex.Match (f.DataBlob, pattern) .Groups [2] .Value))); –

+0

저는 사용하는 언어에 익숙하지 않습니다. 난 당신이 캡처 한 있지만 캡처 그룹을 전혀 사용하지 않았기 때문에 일반 정규식 사용량 측면에서 설명했다. –