Dave Bish의 대답은 훌륭하고 제대로 작동합니다.
그것의 가치에 주목하지만 대체 그 Cast<Match>()
와 OfType<Match>()
의지 속도 일까지.
코드는 다음과 같습니다.
var arr = Regex.Matches(strText, @"\b[A-Za-z-']+\b")
.OfType<Match>()
.Select(m => m.Groups[0].Value)
.ToArray();
결과는 정확히 동일하지만 (정확히 동일한 방식으로 OP의 문제를 해결 함) 큰 문자열의 경우 더 빠릅니다.
테스트 코드 :
static void Test()
{
Stopwatch sw = new Stopwatch();
StringBuilder sb = new StringBuilder();
string strText = "this will become a very long string after my code has done appending it to the stringbuilder ";
Enumerable.Range(1, 100000).ToList().ForEach(i => sb.Append(strText));
strText = sb.ToString();
sw.Start();
var arr = Regex.Matches(strText, @"\b[A-Za-z-']+\b")
.OfType<Match>()
.Select(m => m.Groups[0].Value)
.ToArray();
sw.Stop();
Console.WriteLine("OfType: " + sw.ElapsedMilliseconds.ToString());
sw.Reset();
sw.Start();
var arr2 = Regex.Matches(strText, @"\b[A-Za-z-']+\b")
.Cast<Match>()
.Select(m => m.Groups[0].Value)
.ToArray();
sw.Stop();
Console.WriteLine("Cast: " + sw.ElapsedMilliseconds.ToString());
}
출력은 다음과 같습니다.
OfType: 6540
Cast: 8743
들어 매우 긴 문자열 캐스트 () 때문에 느립니다.
OfType<Match>()
대신에 이것을 사용했을 것입니다Cast<Match>()
... 그러면 결과는 동일합니다.