如何正确替换字符串
本文关键字:字符串 替换 何正确 | 更新日期: 2023-09-27 18:35:36
在我的代码中,我找到所有匹配的元素并将其替换为特殊值。
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;
}
}
但是,我的代码是错误的,因为如果有多个匹配项,它只会替换最后一个匹配项,我如何更正我的代码以替换文本中的所有匹配项?
您的 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
。 - 如果您尝试解析 HTML,最好使用 HTML 解析器。看看 HTML Agility Pack,看看它是否是解决问题的更简单方法。
foreach (比赛中的比赛){ 结果 = 匹配。价值; 如果(结果 != 空) { var first或Default = node。ListImages.FirstOrDefault(); if (firstOrDefault != null) { var htmlWithImages = content.Value.Replace(result, string.Format("img src='{0}' class='newsimage' width='300'", firstOrDefault.ImageUrlId)); 节点。内容 = htmlWithImages; } }}
我想你可能在你的循环周围缺少一组括号......
只有这一行被循环。这就是为什么您的代码只更新最后一个条目,因为结果设置为集合中的最后一项(在 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;
}
}
}
Regex.Replace 方法不会简化您要完成的任务吗?
http://msdn.microsoft.com/en-us/library/system.text.regularexpressions.regex.replace(v=vs.71).aspx