1

正規表現を使用してIRCメッセージを解析するのが適切だと思いました。私はこれまで得ました:

(?::(?<Prefix>[^ ]+) +)?(?<Command>[^ :]+)(?<middle>(?: +[^ :]+)*)(?<coda> +:(?<trailing>.*)?)?

次に、これを次の.NETコードで使用して、メッセージの重要な要素を取得します。

Prefix = matches.Groups["Prefix"].Value;
Command = matches.Groups["Command"].Value;

var parameters = new List<string>();
parameters.AddRange(matches.Groups["middle"].Value
    .Split(new[] { " " }, StringSplitOptions.RemoveEmptyEntries));
parameters.Add(matches.Groups["trailing"].Value);

Parameters = parameters.ToArray();

しかし、コードで個別に分割する必要があるのは好きではありません。middleグループから一致の配列を取得する方法はありますか?

4

1 に答える 1

4

繰り返しグループのプロパティを使用することもできますがCaptures、私はお勧めしません。

まず、パターンを次のように変更する必要があります。

@"(?::(?<Prefix>[^ ]+) +)?(?<Command>[^ :]+)(?<middle>(?: +[^ :]+))*(?<coda> +:(?<trailing>.*)?)?"

次に、次のようにします。

parameters.AddRange(match.Groups["middle"].Captures.
                    OfType<Capture>().
                    Select(c => c.Value));
于 2012-12-19T19:43:06.207 に答える