将匹配结果从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(); }