2013-09-06 3 views
5

모든 쉽지 경우, 교정기를 분리 :정규 표현식 분할 쉼표

"{1,2,3},{4},{3}" 

이 같은 배열로 분할 할 :

{1,2,3} 
    {4} 
    {3} 

내가 패턴 내가이 문자열을 가지고 나는이 일을하고

{1,2,3} 
    4 
    {3} 

: ",\{([^)]*)\},"를 사용하여 부분적으로 만 작동하고 나에게의 배열을주고있다

string[] strs = Regex.Split(string, pattern) 

두 번째 값에 중괄호가 누락되어 있으므로 무엇을 놓치고 있는지 알 수 없습니다. 나는 벽에 머리를 치고 있었다. 어떤 도움이라도 대단히 감사합니다.

감사합니다.

답변

6

당신은 분할 다음 정규식을 사용할 수 있습니다

(?<=\}),(?=\{) 

}로 시작하고 이후 }이 모든 쉼표 , 일치합니다.

RegexHero Demo

+0

@Sniffer btw, 중괄호를 벗어날 필요가 없습니다. 그것들은 유효한 한정어를 구성하는 경우에만 필요합니다. –

+0

@ m.buettner 팁을 보내 주셔서 감사합니다. 언제나 환영받는 의견을 보내 주시면 감사하겠습니다. –

+0

@Sniffer 불쾌감을 느끼면 유감스럽게 생각하지만 불필요한 이스케이프 처리를 방해하지 않는 것이 regex 가독성 (imho)을 높이는 가장 유용한 방법 중 하나이므로 귀사 및/또는 OP가 알고 있다고 생각했습니다. 나는 다음에 그것을 언급하지 않는 것을 기억할 것이다. –

1

그냥 분할을 사용 ANDD 파레을 추가 할 수 있습니다 당신은 넣어했습니다

string[] splitted = str.Split("},{"); 


for(int i = 0; i < splitted.Count ; i++) 
{ 
    if(i != 0) 
    { 
    Console.WriteLine("{"); 
    } 
    Console.WriteLine(curr[i]); 
    if(i != splitted.Count - 1) 
    { 
     Console.WriteLine("}"); 
    } 
} 
0

은 "순수 정규식"대답은 다음과 같이이다 :

 string str = "{1,2,3},{4},{3}"; 
     string[] strs = 
      Regex.Matches(str, @"({.*?})") 
       .OfType<Match>() 
       .Select(m => m.Groups[0].Value) 
       .ToArray(); 

인 단순한 콤마가 아닌 쉼표 또는 공백과 같이 중괄호로 묶인 그룹간에 다른 또는 심지어 혼합 된 구분 기호에 대해 더 관대합니다. 입력 문자열이 잘 정의되어 있으면 문제가되지 않지만 다른 소스에서 올 수있는 입력을 처리 할 수있는 것을 선호합니다. 이 적합합니다.