在我的代码中,我找到所有匹配元素并将其替换为特殊值。
Regex imgRule = new Regex("img id=\\\".+?\\\"");
MatchCollection matches = imgRule.Matches(content.Value);
string result = null;
foreach (Match match in matches)
result = match.Value;
if (result != null)
{
var firstOrDefault = node.ListImages.FirstOrDefault();
if (firstOrDefault != null)
{
var htmlWithImages = content.Value.Replace(result, string.Format("img src='{0}' class='newsimage' width='300'", firstOrDefault.ImageUrlId));
node.Content = htmlWithImages;
}
}
但是,我的代码是错误的,因为如果有多个匹配它只替换最后一个匹配,我如何更正我的代码以替换文本中的所有匹配?
答案 0 :(得分:3)
你的for循环体周围缺少花括号。没有花括号,多次执行的唯一行是第一行。
请改为尝试:
foreach (Match match in matches)
{ // added curly brace here
result = match.Value;
if (result != null)
{
var firstOrDefault = node.ListImages.FirstOrDefault();
if (firstOrDefault != null)
{
var htmlWithImages = content.Value.Replace(result,
string.Format("img src='{0}' class='newsimage' width='300'",
firstOrDefault.ImageUrlId));
node.Content = htmlWithImages;
}
}
} // added curly brace here
我还想补充两点:
Regex.Replace
的方法,而不是先使用正则表达式查找要替换的字符串,然后使用string.Replace
。答案 1 :(得分:1)
我想你可能会错过循环中的一组括号......
只有这一行被循环。这就是为什么你的代码只更新最后一个条目,因为结果被设置为集合中的最后一项(在foreach的最后一次迭代中)
foreach (Match match in matches)
result = match.Value;
更正后的代码
Regex imgRule = new Regex("img id=\\\".+?\\\"");
MatchCollection matches = imgRule.Matches(content.Value);
string result = null;
foreach (Match match in matches) {
result = match.Value;
if (result != null)
{
var firstOrDefault = node.ListImages.FirstOrDefault();
if (firstOrDefault != null)
{
var htmlWithImages = content.Value.Replace(result, string.Format("img src='{0}' class='newsimage' width='300'", firstOrDefault.ImageUrlId));
node.Content = htmlWithImages;
}
}
}
答案 2 :(得分:1)
foreach (Match match in matches) { result = match.Value; if (result != null) { var firstOrDefault = node.ListImages.FirstOrDefault(); if (firstOrDefault != null) { var htmlWithImages = content.Value.Replace(result, string.Format("img src='{0}' class='newsimage' width='300'", firstOrDefault.ImageUrlId)); node.Content = htmlWithImages; } } }
答案 3 :(得分:0)
Regex.Replace方法不会简化您要完成的任务吗?
http://msdn.microsoft.com/en-us/library/system.text.regularexpressions.regex.replace(v=vs.71).aspx