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

时间:2016-09-13 19:11:33

标签: c#

我有像

这样的字符串

"姓=阿尔法&安培;名字=贝塔&安培;的 Email=blah@blah.com &安培;国家= UnitedStates的&安培;的 Email=foo@foobar.com & #34;

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

我使用了模式"电子邮件=(。*?)&"但它需要一个&在字符串的末尾。

我的代码替换电子邮件值

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

有关正则表达式的任何帮助吗?

4 个答案:

答案 0 :(得分:4)

.NET中的字符串是不变的不可变的,the input parameter to this overload of Regex.Replace is not a ref parameter。相反,更改的字符串将由Regex.Replace返回。只需指定它:

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

我假设{虽然我们都知道这对你和我有什么影响)ComputeReplacementMatchEvaluator

答案 1 :(得分:3)

也许您可以查看HttpUtility.ParseQueryString方法,因为它可以在没有正则表达式的情况下处理相同的任务:

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"

答案 2 :(得分:0)

您可以使用以下代码来收发电子邮件:

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

答案 3 :(得分:0)

如果在使用正则表达式之前拆分字符串,则不再需要&amp;在字符串的末尾(最终会在结果字符串的末尾添加一个额外的&amp;,但是如果它是一个问题你可以检查它):

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) + "&"; }
相关问题