C# 正则表达式将值替换为第一个匹配项

C# 正则表达式将值替换为第一个匹配项,c#,regex,C#,Regex,我想知道在正则表达式中是否可以这样做,用第一个匹配项('John Doe')替换一个值('John Doe',在下面的示例中)test@tester.com'在我下面的示例中): 输入: Contact: <a href="mailto:test@tester.com">John Doe</a> 提前谢谢。应该是这样的。代码将在所有mailto链接中用电子邮件替换名称: var html=newstringbuilder(“联系人:”); var regex=新的reg

我想知道在正则表达式中是否可以这样做,用第一个匹配项('John Doe')替换一个值('John Doe',在下面的示例中)test@tester.com'在我下面的示例中):

输入:

Contact: <a href="mailto:test@tester.com">John Doe</a>

提前谢谢。

应该是这样的。代码将在所有mailto链接中用电子邮件替换名称:

var html=newstringbuilder(“联系人:”);
var regex=新的regex(@“\

可能是这样的。在所有mailto链接中,代码将用电子邮件替换名称:

var html=newstringbuilder(“联系人:”);
var regex=新的regex(@“\

好,使用MatchEvaluator委托和命名捕获使其正常工作:

output = Regex.Replace(input, 
    @"\<a([^>]+)href\=.?mailto\:(?<mailto>[^""'>]+).?([^>]*)\>(?<mailtext>.*?)\<\/a\>", 
    m => m.Groups["mailto"].Value);
output=Regex.Replace(输入,
@“\]+)href\=.?mailto\:(?[^”“'>]+).?([^>]*)\>(?.*?”,
m=>m.Groups[“mailto”].Value);

好,使用MatchEvaluator委托和命名捕获使其正常工作:

output = Regex.Replace(input, 
    @"\<a([^>]+)href\=.?mailto\:(?<mailto>[^""'>]+).?([^>]*)\>(?<mailtext>.*?)\<\/a\>", 
    m => m.Groups["mailto"].Value);
output=Regex.Replace(输入,
@“\]+)href\=.?mailto\:(?[^”“'>]+).?([^>]*)\>(?.*?”,
m=>m.Groups[“mailto”].Value);

是的,这是可能的。然而,你的例子并不清楚。你用什么替换哪一部分?据我所知,您只需匹配并返回字符串的某些部分,没有替换。@AliFerhat我想用电子邮件地址替换名称(John Doe)。是的,这是可能的。然而,你的例子并不清楚。你用什么替换哪一部分?据我所知,您只需匹配并返回字符串的某些部分,没有替换。@AliFerhat我想用电子邮件地址替换姓名(John Doe)。不幸的是,我确实需要“注入”匹配项,而不是构造一个新字符串,因为输入是一个大字符串,包含的文本比我在示例中指定的更多。@Nick,我是否正确理解您有一个可以包含许多“mailto”链接的HTML页面,并且您希望全部替换它们?如果HTML页面存储在字符串对象中,那么“注入”的机会很小,因为MSDN notes字符串是不可变的——创建对象后,字符串对象的内容无法更改。根据HTML数据的检索方式,您可能会考虑另一种方法。不幸的是,我确实需要“注入”匹配,而不是构造一个新的字符串,因为输入是一个比我在例子中指定的文本更大的字符串。“Nick,我知道您有一个HTML页面,可以包含许多“Melto””。如果HTML页面存储在一个字符串对象中,那么“注入”的机会就很小,因为MSDN notes字符串是不可变的——字符串对象的内容在对象创建后无法更改。取决于如何检索HTML数据,您可能会考虑不同的方法。
Contact: <a href="mailto:test1@tester1.com">test1@tester1.com</a> <a href="mailto:test2@tester2.com">test2@tester2.com</a>
output = Regex.Replace(input, 
    @"\<a([^>]+)href\=.?mailto\:(?<mailto>[^""'>]+).?([^>]*)\>(?<mailtext>.*?)\<\/a\>", 
    m => m.Groups["mailto"].Value);