2009-11-28 3 views

답변

16

당신은 정규 표현식이 할 수 있고, Linq에 약간의 : 전자 키를 사용하면 [ 문자가이 방법을 일치시킬 수 있습니다 예를 들어 올바르게, 정규 표현식에서 사용되는 특수 문자를 탈출하는 것입니다.

string s = "test [4df] test [5y" + Environment.NewLine + "u] test [6nf]"; 

    ICollection<string> matches = 
     Regex.Matches(s.Replace(Environment.NewLine, ""), @"\[([^]]*)\]") 
      .Cast<Match>() 
      .Select(x => x.Groups[1].Value) 
      .ToList(); 

    foreach (string match in matches) 
     Console.WriteLine(match); 

출력 : 정규 표현식을 의미

여기
4df 
5yu 
6nf 

가 무슨 :

\[ : Match a literal [ 
( : Start a new group, match.Groups[1] 
[^]] : Match any character except ] 
* : 0 or more of the above 
) : Close the group 
\] : Literal ] 
+0

정말 멋집니다. – Ravia

+0

대답 주셔서 감사합니다, 나는 놀았지만 관리 할 수 ​​없습니다 - 어떻게 대괄호를 포함하도록 정규 표현식을 변경하겠습니까? –

3
Regex regex = new Regex(@"\[[^\]]+\]", RegexOptions.Multiline); 
+0

@ "\ [([^]] *) \]"는 좋아하는 패턴 인 것 같습니다. –

0
이 오프 대괄호를 손질해야합니다

는, 중요한 부분은 게으른 운영자 입니다

Regex rx = new Regex(@"\[.+?\]"); 
var collection = rx.Matches(s); 
.

+0

RegexOptions.Multiline을 지정해도 여러 줄에 걸쳐 작동하지 않습니다. (알고 있습니다, 시도했습니다.) –

+0

여러 줄을 모두 사용하면 괜찮습니다. –

+0

Regex.SingleLine을 사용할 수 있습니다. 너무. 실제로이 방법은 전체 문자열이 아닌 문자열의 캡처 된 부분 만 바꾸기 때문에 필자가 제시 한 솔루션보다 성능이 약간 향상 될 수 있습니다. –