如何正确替换字符串

本文关键字:字符串 替换 何正确 | 更新日期: 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