C# 如何通过c使用正则表达式替换#

C# 如何通过c使用正则表达式替换#,c#,C#,我有一条像绳子一样的线 “FirstName=Alpha&LastName=Beta&电子邮件=blah@blah.com&Country=UnitedStates&电子邮件=foo@foobar.com” 我需要一些帮助与正则表达式提取电子邮件值 我使用了模式“Email=(.*?&)”,但它需要在字符串末尾加一个& 替换电子邮件值的我的代码 Regex.Replace(text, "email=(.*?)&", ComputeReplacement, RegexOptions.Ign

我有一条像绳子一样的线

“FirstName=Alpha&LastName=Beta&电子邮件=blah@blah.com&Country=UnitedStates&电子邮件=foo@foobar.com

我需要一些帮助与正则表达式提取电子邮件值

我使用了模式“Email=(.*?&)”,但它需要在字符串末尾加一个&

替换电子邮件值的我的代码

Regex.Replace(text, "email=(.*?)&", ComputeReplacement, RegexOptions.IgnoreCase);
关于.NET中正则表达式的任何帮助?

字符串都是不变的、不可变的。相反,更改后的字符串将由
Regex.Replace
返回。只需分配:

text = Regex.Replace(text, "email=(.*?)&", ComputeReplacement, RegexOptions.IgnoreCase);

我假设(尽管我们都知道这对你和我有什么影响)
ComputeReplacement
是一个
matcheevaluator

也许您可以研究一下该方法,因为它可以在不使用正则表达式的情况下处理相同的任务:

var query = "FirstName=Alpha&LastName=Beta&Email=blah@blah.com&Email=foo@foobar.com";
var parsed = HttpUtility.ParseQueryString(query);
foreach (var email in parsed.GetValues("Email"))
{
    Console.WriteLine(email);
}

这种方法还负责URL编码;例如,尝试使用
“FirstName=Some%20Name”

您可以使用以下代码获取电子邮件:

string input = "FirstName=Alpha&LastName=Beta&Email=blah@blah.com&Country=UnitedStates&Email=foo@foobar.com";
Dictionary<string,string> emails = input.Split(new char[] { '&' }).Where(param => param.ToLower().Contains("email")).Select(param => param.Split(new char[] { '=' })).ToDictionary(x=> x[1], x=> x[0]);
foreach (string email in emails.Keys)
{
    Console.WriteLine(email);
}
string input=“FirstName=Alpha&LastName=Beta&Email=blah@blah.com&国家/地区=美国和电子邮件=foo@foobar.com";
字典emails=input.Split(新字符[]{'&}).Where(param=>param.ToLower().Contains(“email”).Select(param=>param.Split(新字符[]{'=})).ToDictionary(x=>x[1],x=>x[0]);
foreach(emails.Keys中的字符串电子邮件)
{
控制台。WriteLine(电子邮件);
}

如果在使用正则表达式之前拆分字符串,则不再需要在字符串末尾添加一个&符号(您将在生成的字符串末尾添加一个额外的&符号,但如果出现问题,您可以进行检查):


示例字符串中有两封不同的电子邮件。你想用什么来代替它们?我想用一个像“某物”这样的文本来代替电子邮件,我要成为一个令人难以忍受的书呆子,并指出字符串是不可变的。不变量通常指的是泛型(不变量是当某些东西既不是协变的也不是逆变的时候你得到的)。@Kyle谢谢。我对这个词有点奇怪的失语症。你的学究风度是完全可以忍受的。我的问题应该更清楚一些。给定的代码不适用于输入字符串,因为第二次出现的电子邮件不会以字符串结尾。需要有关正则表达式的帮助,然后我需要将所有电子邮件值替换为计算值,如email.Length。为我工作的正则表达式是-@“email=(?[^&]*)&?”然后我使用下面的命令使其工作。MatchCollection matches=Regex.matches(文本、模式、RegexOptions.IgnoreCase | RegexOptions.Compiled);foreach(Match中的Match){inputText.Replace(Match.Result(string.Format(${{0}}},namedGroup)),getscrubedpiisting(Match.Result(string.Format(${0},namedGroup));}namedGroup是“Match”
String input = "FirstName=Alpha&LastName=Beta&Email=blah@blah.com&Country=UnitedStates&Email=foo@foobar.com";
String output = "";
foreach (string element in input.Split('&')) {
    output += Regex.Replace(element, "email=(.*?)&", ComputeReplacement, RegexOptions.IgnoreCase) + "&"; }