使用MatchEvaluator委托生成列表而不使用类变量?

时间:2009-03-30 08:00:13

标签: c# regex

后台:我正在尝试从包含整个引用的页面生成引用列表,并用HTML替换引用标记。

我在C#工作

文字看起来像:

The dog ate 3 cats and felt ill <ref name="something">http://cateater.com</ref>

我想使用Regex.Replace方法替换所有<ref>,将它们推入哈希,我以后可以将其作为引用列表呈现。

问题:看起来在替换操作期间运行代码的方法是使用一个接受Match对象的'MatchEvaluator Delegate',但似乎不能接受其他参数。

example on MSDN使用类变量来完成此任务,但我希望有一个更优雅的解决方案。

2 个答案:

答案 0 :(得分:3)

由于您使用的是XML标记,因此源文档无法作为XML DOM处理吗?在这种情况下,使用XSLT比RegEx容易得多。

如果没有,那么可以通过使用匿名函数有效地使MatchEvaluator委托变为假名: -

MatchEvaluator evaluator = delegate(Match m)
{
    // code to return replacement
    // this code uses and modifies lookups
}

Dictionary<string, string> lookups = new Dictionary<string, string>();
sOutput = someRegex.Replace(sInput, evaluator);

答案 1 :(得分:0)

使用以下内容获取参考列表:

var srcmatches = Regex.Matches(src, "<ref .*?>(.*?)</ref>");

List<string> refs = srcmatches.OfType<Match>().Select(x => x.Groups[1].ToString()).ToList();

首先匹配<ref>标记,然后查询标记的内容并将其转换为字符串列表。