使用Regex.Replace()替换单词列表失败

时间:2013-03-08 04:07:59

标签: c#

我试图用一些HTML标签替换长字符串中的单词。当我尝试为List中的多个单词执行此操作时,我似乎错过了一些东西,但它确实可以很好地用于单个单词。

这是我试过的: 出于测试目的,我将字符串缩减并更改为:

string strTest = "Ein toller Testtext mit Folge und Folgen sowie Folgen<p> und <p>Folge und Cauchyfolgen und Cauchy-Folgen und Folgeerscheinungen und Folgendem";

以下代码用作将“Folge”替换为“WOW”的文本:

strResult = Regex.Replace(strTest, "\\b" + "Folge" + "\\b", "WOW");

这导致:"Ein toller Testtext mit WOW und Folgen sowie Folgen<p> und <p>WOW und Cauchyfolgen und Cauchy-Folgen und Folgeerscheinungen und Folgendem",这是单个单词的理想结果。

以下代码产生了相同的结果,但使用的是对象列表,其中“strWort”是我要替换的单词。注意listTooltips [39] .strWort的值是“Folge”。

strResult = Regex.Replace(strTest, "\\b" + listTooltips[39].strWort + "\\b", "WOW");

在下一步中,我尝试为整个列表执行此操作。所以我做了以下事情:

for (int i = 0; i < listTooltips.Count(); i++)
{
    strResult = Regex.Replace(strTest, "\\b" + listTooltips[i].strWort + "\\b", "WOW");
}

结果是String未更改。我迷失了为什么。如上所述,即使我使用列表中的特定对象,如果我只放一个Word来替换它也可以。所以我很确定列表的代码没有错,至少不完整。

我试过的其他事情:

  • 将每个单词的值放入单独的字符串中,并将其用于Regex.Replace。失败。
  • 使用MessageBox.Show()显示listTooltips [i] .strWort的值,以确保所有内容按预期输出。
  • 使用Regex.Match检查上面的代码是否实际找到了什么,是的,它确实找到了所有内容。它只是因为某些原因而不能取代ist。
  • 不使用Regex并改为使用string.replace-method。这适用于上述循环,但由于缺少过滤器/匹配模式而导致不同的不需要的结果。即“Folgen”将被替换为“WOWn”等。

真的想知道为什么这样做主要是为了更好地理解它。但是,id也喜欢解决问题的解决方案: - )

提前致谢!

1 个答案:

答案 0 :(得分:1)

for循环中,您始终在原始文本Regex.Replace()上执行strTest

您需要在strResult中之前替换的文本上调用它,否则每个替换(最后一个替换除外)将被原始文本覆盖。

试试这个:

string strResult = strTest;
for (int i = 0; i < listTooltips.Count(); i++) {
    strResult = Regex.Replace(strResult , "\\b" + listTooltips[i].strWort + "\\b", "WOW");
}