我认为用正则表达式解析IRC messages会很好。我得到了这个:
(?::(?<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
组中获取一系列匹配项?
答案 0 :(得分:2)
您可以使用重复组的Captures
属性,但我不建议。
首先,您需要将模式更改为:
@"(?::(?<Prefix>[^ ]+) +)?(?<Command>[^ :]+)(?<middle>(?: +[^ :]+))*(?<coda> +:(?<trailing>.*)?)?"
其次,你会这样做:
parameters.AddRange(match.Groups["middle"].Captures.
OfType<Capture>().
Select(c => c.Value));