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

C# 使用MatchEvaluator委托生成列表而不使用类变量?,c#,regex,C#,Regex,Background:我正在尝试从整个页面都有引用的页面生成引用列表,并用HTML替换引用标记 我在C工作# 文本看起来像: The dog ate 3 cats and felt ill <ref name="something">http://cateater.com</ref> 狗吃了3只猫,感觉不舒服http://cateater.com 我想使用Regex.Replace方法替换所有的s,将它们放入一个散列中,以后可以作为引用列表呈现 问题:在替换操作期间运

Background:我正在尝试从整个页面都有引用的页面生成引用列表,并用HTML替换引用标记

我在C工作#

文本看起来像:

The dog ate 3 cats and felt ill <ref name="something">http://cateater.com</ref>
狗吃了3只猫,感觉不舒服http://cateater.com 我想使用Regex.Replace方法替换所有的
s,将它们放入一个散列中,以后可以作为引用列表呈现

问题:在替换操作期间运行代码的方法似乎是使用“MatchEvaluator委托”,该委托接受匹配对象,但似乎不能接受其他参数


使用类变量来实现这一点,但我希望有一个更优雅的解决方案。

既然您使用的是XML标记,那么源文档不能作为XML DOM处理有什么原因吗?在这种情况下,使用XSLT比使用正则表达式容易得多

如果没有,则可以使用匿名函数有效地参数化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);
MatchEvaluator evaluator=代表(匹配m)
{
//返回替换的代码
//此代码使用和修改查找
}
字典查找=新建字典();
sOutput=someRegex.Replace(输入,求值器);

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

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

List<string> refs = srcmatches.OfType<Match>().Select(x => x.Groups[1].ToString()).ToList();
var srcmatches=Regex.Matches(src,(.*);
List refs=srcmatches.OfType()。选择(x=>x.Groups[1]。ToString()).ToList();

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

我希望如此!源代码是HTML、wiki标记和其他类似元素的混合体..:(