我有像
这样的字符串"姓=阿尔法&安培;名字=贝塔&安培;的 Email=blah@blah.com &安培;国家= UnitedStates的&安培;的 Email=foo@foobar.com & #34;
我需要一些正则表达式的帮助,并提取电子邮件值。
我使用了模式"电子邮件=(。*?)&"但它需要一个&在字符串的末尾。
我的代码替换电子邮件值
Regex.Replace(text, "email=(.*?)&", ComputeReplacement, RegexOptions.IgnoreCase);
有关正则表达式的任何帮助吗?
答案 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);
我假设{虽然我们都知道这对你和我有什么影响)ComputeReplacement
是MatchEvaluator
。
答案 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) + "&"; }