如何在c#中使用正则表达式进行替换

本文关键字:正则表达式 替换 | 更新日期: 2023-09-27 18:06:47

我有像

这样的字符串

" FirstName = Alpha& LastName = Beta& 电子邮件= blah@blah.com ,国家= UnitedStates& 电子邮件= foo@foobar.com "

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

我使用了模式"Email=(.*?)&"但是它需要一个&

我的代码来替换email值

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

对正则表达式有什么帮助吗?

如何在c#中使用正则表达式进行替换

. net中的字符串是不变的不可变的,并且Regex.Replace重载的input参数不是ref参数。相反,更改后的字符串将由Regex.Replace返回。直接赋值:

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

我假设(尽管我们都知道这对你和我有什么影响)ComputeReplacementMatchEvaluator

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

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);
}

如果您在使用Regex之前拆分字符串,则不再需要&在字符串的末尾,你会得到一个额外的& &;在结果字符串的末尾,但如果它是一个问题,您可以检查它):

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) + "&"; }