MatchCollection 클래스에서 Linq를 사용하는 엄청난
소개
기본적으로는, 「Linq를 사용하고 싶지만, IEnumerable가 아니고 IEnumerable로 선언되고 있기 때문에 사용할 수 없다!」라고 하는 경우의 이야기입니다.
그리고 쿼리 구문이 아니라 메소드 구문의 이야기입니다.
소스 코드
static void Main(string[] args)
{
string input = "abc123 bbb222 abc789";
string pattern = @"(..)c(\d{3})";
MatchCollection matches = Regex.Matches(input, pattern);
var matches2 = matches.Cast<Match>().Select(x => x.Groups.Cast<Group>());
foreach(var str in matches2.SelectMany(x => x))
{
Console.WriteLine(str);
}
}
출력 결과
abc123
ab
123
abc789
ab
789
해설
'MatchCollection 클래스는 그림과 같이 리스트의 리스트를 가지는 계층 구조로 되어 있습니다. 또한 MatchCollection과 GroupCollection은 IEnumerable 유형이므로이 상태에서는 Linq를 사용할 수 없습니다.
그 때문에 이하와 같은 변환을 실시합니다.
var matches2 = matches.Cast().Select(x => x.Groups.Cast());
MatchCollection 클래스는 여러 Match 클래스의 인스턴스를 가지므로 .Cast ()를 사용하여 IEnumerable에서 IEnumerable 로 변환 할 수 있습니다. 마찬가지로 x.Groups도 IEnumerable에서 IEnumerable로 변환할 수 있습니다.
Reference
이 문제에 관하여(MatchCollection 클래스에서 Linq를 사용하는 엄청난), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/tokishirazu/items/74f49bba971ad5fa1dcb
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
그리고 쿼리 구문이 아니라 메소드 구문의 이야기입니다.
소스 코드
static void Main(string[] args)
{
string input = "abc123 bbb222 abc789";
string pattern = @"(..)c(\d{3})";
MatchCollection matches = Regex.Matches(input, pattern);
var matches2 = matches.Cast<Match>().Select(x => x.Groups.Cast<Group>());
foreach(var str in matches2.SelectMany(x => x))
{
Console.WriteLine(str);
}
}
출력 결과
abc123
ab
123
abc789
ab
789
해설
'MatchCollection 클래스는 그림과 같이 리스트의 리스트를 가지는 계층 구조로 되어 있습니다. 또한 MatchCollection과 GroupCollection은 IEnumerable 유형이므로이 상태에서는 Linq를 사용할 수 없습니다.
그 때문에 이하와 같은 변환을 실시합니다.
var matches2 = matches.Cast().Select(x => x.Groups.Cast());
MatchCollection 클래스는 여러 Match 클래스의 인스턴스를 가지므로 .Cast ()를 사용하여 IEnumerable에서 IEnumerable 로 변환 할 수 있습니다. 마찬가지로 x.Groups도 IEnumerable에서 IEnumerable로 변환할 수 있습니다.
static void Main(string[] args)
{
string input = "abc123 bbb222 abc789";
string pattern = @"(..)c(\d{3})";
MatchCollection matches = Regex.Matches(input, pattern);
var matches2 = matches.Cast<Match>().Select(x => x.Groups.Cast<Group>());
foreach(var str in matches2.SelectMany(x => x))
{
Console.WriteLine(str);
}
}
'MatchCollection 클래스는 그림과 같이 리스트의 리스트를 가지는 계층 구조로 되어 있습니다. 또한 MatchCollection과 GroupCollection은 IEnumerable 유형이므로이 상태에서는 Linq를 사용할 수 없습니다.
그 때문에 이하와 같은 변환을 실시합니다.
var matches2 = matches.Cast
MatchCollection 클래스는 여러 Match 클래스의 인스턴스를 가지므로 .Cast
Reference
이 문제에 관하여(MatchCollection 클래스에서 Linq를 사용하는 엄청난), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/tokishirazu/items/74f49bba971ad5fa1dcb텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)