将匹配结果从regex转换为字符串列表

如何将匹配结果列表从regex转换为List ? 我有这个function,但它总是会产生exception,

无法将类型为“System.Text.RegularExpressions.Match”的对象强制转换为“System.Text.RegularExpressions.CaptureCollection”。

 public static List ExtractMatch(string content, string pattern) { List _returnValue = new List(); Match _matchList = Regex.Match(content, pattern); while (_matchList.Success) { foreach (Group _group in _matchList.Groups) { foreach (CaptureCollection _captures in _group.Captures) // error { foreach (Capture _cap in _captures) { _returnValue.Add(_cap.ToString()); } } } } return _returnValue; } 

如果我有这个字符串,

 I have a dog and a cat. 

正则表达式

 dog|cat 

我希望函数将结果返回到List

 dog cat 

使用正则表达式,您需要使用Regex.Matches来获取您想要的最终字符串列表:

 MatchCollection matchList = Regex.Matches(Content, Pattern); var list = matchList.Cast().Select(match => match.Value).ToList(); 

通过正则表达式匹配交叉发布回答 –

要获得正则表达式匹配列表,您可以:

 var lookfor = @"something (with) multiple (pattern) (groups)"; var found = Regex.Matches(source, lookfor, regexoptions); var captured = found // linq-ify into list .Cast() // flatten to single list .SelectMany(o => // linq-ify o.Groups.Cast() // don't need the pattern .Skip(1) // select what you wanted .Select(c => c.Value)); 

这会将所有捕获的值“展平”到单个列表。 要维护捕获组,请使用Select而不是SelectMany来获取列表列表。

使用Linq的可能解决方案:

 using System.Linq; using System.Text.RegularExpressions; static class Program { static void Main(string[] aargs) { string value = "I have a dog and a cat."; Regex regex = new Regex("dog|cat"); var matchesList = (from Match m in regex.Matches(value) select m.Value).ToList(); } } 

这是另一个适合您的代码的解决方案。

 while (_matchList.Success) { _returnValue.Add(_matchList.Value); _matchList = _matchList.NextMatch(); }