2012-02-24 3 views
8

나는 다음과 같은 문자열이 있습니다다차원 배열에 괄호를 포함하는으로 문자열을 분할하는 방법

"(X,Y,Z),(A,B,C),(R,S,T)" 
내가 다차원 배열로 분할 할

: 그래서

arr[0] = [x,y,z] 
arr[1] = [a,b,c] 
arr[2] = [r,s,t] 

:

arr[0][1] = y, arr[0][2] = z, etc. 

나는 첫 번째와 마지막 괄호를 떼어 내고 "),"(그리고 "그 arra 다른 스플릿을하고있어. 하지만 나는 뒷골목 바에서 스트리퍼 (말장난 의도)처럼 더러운, 불확실하다고 느낍니다 ... 깨끗한 방법이 있습니까?

구조에 LINQ가 있습니까?

저는 C#을 사용하고 있습니다.

+0

2 차원 어레이와 비가시 어레이가 확실하게 알고 있습니까? –

+0

그래, 항상 2 차원, 항상 두 번째 차원의 요소의 동일한 번호 (3) – OpenR

+0

들쭉날쭉 한 배열 (코드) 또는 2D 배열을 원하십니까? –

답변

5
string data = "(X,Y,Z),(A,B,C),(R,S,T)"; 

string[][] stringses = data.Trim('(', ')') 
    .Split(new[] {"),("}, StringSplitOptions.RemoveEmptyEntries) 
    .Select(chunk => chunk.Split(',')) 
    .ToArray(); 
+0

답변에 감사드립니다! – OpenR

3

당신은 할 수있을 것입니다 상당히 쉽게 문자열 분할 및 LINQ이에서 jagged array (코드와 같이) :

string original = "(X,Y,Z),(A,B,C),(R,S,T)"; 

string[] groups = original.Trim('(',')') 
        .Split(new[] {"),("}, StringSplitOptions.RemoveEmptyEntries); 
string[][] results = groups.Select(g => g.Split(',')).ToArray(); 
+0

감사합니다. 먼저 답을 +1하십시오. – OpenR

0

당신은 정규 표현식

하여 데이터를 얻을 수 있습니다 reqular 표현은 : (\(([A-Z]+)\,?\))+ 이것은 x, y, z 그룹으로 나눠 줄 것입니다. 그리고 두 번째 차원 배열에 추가하십시오.

3

정규식은 당신입니다. r 친구. 다음은 간단한 코드입니다.

var input = @"(X,Y,Z),(A,B,C),(R,S,T)"; 
var pattern = @"[A-Za-z,]+\b"; 

List<List<string>> twoDimentionList = new List<List<string>>(); 

foreach (Match m in Regex.Matches(input, pattern)) 
{ 
    List<string> values = m.Value.Split(',').ToList<string>(); 
    twoDimentionList.Add(values) 
} 

희망이 있습니다.

관련 문제