2009-04-11 3 views
31

대괄호 안에있는 모든 것을 검색하고 나머지 텍스트는 버리기 위해 현재 C# (최신 .NET 및 Visual Studio 2008)에서 문자열을 분할하려고합니다.C# Regex Split - 대괄호 안에있는 모든 것

예 : "H1 수용체 길항제 [HSA : 3269] [경로 : hsa04080 (3269)]"이 경우

, 나는 점점 관심이 있어요 "HSA : 3269"와 " 경로 : hsa04080 (3269) "문자열 배열로.

어떻게 달성 할 수 있습니까?

답변

60

Split 여기에 도움이되지 않습니다. 정규 표현식을 사용해야합니다.

// using System.Text.RegularExpressions; 
// pattern = any number of arbitrary characters between square brackets. 
var pattern = @"\[(.*?)\]"; 
var query = "H1-receptor antagonist [HSA:3269] [PATH:hsa04080(3269)]"; 
var matches = Regex.Matches(query, pattern); 

foreach (Match m in matches) { 
    Console.WriteLine(m.Groups[1]); 
} 

결과가 나타납니다.

+3

3.5에서 MatchCollection의 enumeartor가 여전히 Match as Object를 반환한다는 것을 알고 있습니까? – chakrit

+3

어쨌든 ... 더 나은 정규 표현식은 \ [([^ \]] *) \] 안전 할 수 있습니다 :-) – chakrit

+0

@chakrit : 1. 그렇습니다. 그러나 이전 버전과의 호환성을 위해 변경할 수 없습니다 원인. 정말 수치. 마이크로 소프트는 파이썬 3처럼 할 수있는 공을 가지고 있어야한다 : 2.0 이전의 모든 것을 던져 버리고 좋은 변화를 가져온다. 그러나 이것은 일어나지 않을 것입니다 ... –

0

내가 로버트와 플로리다를 포함하는 배열을해야합니다이

string mystr = "Hello my name is {robert} and i live in {florida}"; 

List<string> myvariables = new List<string>(); 
while (mystr.Contains("{")) 
{ 
    myvariable.Add(mystr.Split('{', '}')[1]); 
    mystr = mystr.Replace("{" + mystr.Split('{', '}')[1] + "}", ""); 
}; 

이 방법을 사용해보십시오.

+2

이 코드는 괄호가 항상 완벽하게 일치한다고 가정합니다 ('{'의 앞에'}'를 사용하지 않았고'{'을 두 번 연속 사용하지 않았습니다.) 불필요하게 여러 번 문자열을 분리하기 때문에 매우 비효율적입니다. 다른 답변처럼 Regex를 사용하는 것이 훨씬 효율적이고 강력합니다. –

관련 문제