2009-09-27 2 views
1

는이 같은 문자열을 분할하여 사전을 만들 필요가 내가 값으로 "키"의 키와 같은 사전과 어떤으로 [] 내에서 모든 것을 얻기에 관심 [# 키 #!] :은 사전 <문자열, 문자열>에 문자열을 분할하는 방법

key :: value 
SenderName :: Some name 
SenderEmail :: Some email address 
ElementTemplate :: Some text for 
        an element 

감사

+4

'['와 ']'이전 버전의

public static Dictionary<string, string> SplitToDictionary(string input) { Regex regex = new Regex(@"\[([^\]]+)\]([^\[]+)"); return regex.Matches(input).Cast<Match>().ToDictionary(x => x.Groups[1].Value, x => x.Groups[2].Value.Trim()); } 

Oneliner? 그렇다면 어떻게 피할 수 있습니까? –

+0

예에서 [ElementTemplate] 앞에 공백이 있습니다. 그것은 글리치인가 공백인가? 섹션 식별자는 항상 전체 행을 차지합니까? – VolkerK

+0

VolkerK : [ElementTemplate] 이전 공간이 제 오류입니다 - 죄송합니다. 켄트 : 좋은 지적, 아마도 나는 모른다. 키가 더 쉽게 둘러 쌓인다면 아무 것도 둘러 쌀 수 있습니다. [! # key #!] –

답변

5

C# 3.0 버전 -

public static Dictionary<string, string> SplitToDictionary(string input) 
{ 
    return new Regex(@"\[([^\]]+)\]([^\[]+)").Matches(input).Cast<Match>().ToDictionary(x => x.Groups[1].Value, x => x.Groups[2].Value.Trim()); 
} 

표준 C# 2.0 버전 - - 값을 포함 할 수 있습니다

public static Dictionary<string, string> SplitToDictionary(string input) 
{ 
    Regex regex = new Regex(@"\[([^\]]+)\]([^\[]+)"); 

    Dictionary<string, string> result = new Dictionary<string, string>(); 
    foreach (Match match in regex.Matches(input)) 
    { 
     result.Add(match.Groups[1].Value, match.Groups[2].Value.Trim()); 
    } 

    return result; 
} 
+1

+1, 30 초 동안 저를 때려주십시오. –

0

당신은 첫째을 제거 할 수 있습니다 '['그리고 모든 "] \ n"for for]]

그런 다음 '['를 이스케이프로 사용하여 문자열을 분할합니다. 이 때 당신이

키] 값 0과 같은 배열을해야합니다 - SENDERNAME] 일부 이름 1 - SENDEREMAIL] 일부 이메일 주소 2 - ElementTemplate] 요소

에 대한 일부 텍스트가 다음 그것은 간단합니다. ']'를 이스케이프로 사용하여 분할하면서 반복합니다. 첫 번째 요소는 키이고, 두 번째 요소는 값입니다.

1

형식이 Windows INI과 매우 비슷합니다. Google은 "C# ini file parser"를 검색 할 때 this article을 제공합니다. 거기에서 몇 가지 아이디어를 얻을 수 있습니다.

관련 문제