1

我正在尝试用一些 HTML 标记替换长字符串中的单词。尝试对列表中的多个单词执行此操作时,我似乎错过了一些东西,但是它确实适用于单个单词。

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

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");
}

结果是未更改的字符串。我不知道为什么。如前所述,如果我只放置一个单词来替换它确实有效,即使我使用列表中的特定对象。所以我很确定列表的代码没有错,至少不完全。

我尝试过的其他事情:

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

真的想知道为什么这主要是为了更好地理解它。但是我也喜欢 corse 的解决方案:-)

提前致谢!

4

1 回答 1

1

在您的for循环中,您总是Regex.Replace()对原始文本执行 a strTest

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

试试这个:

string strResult = strTest;
for (int i = 0; i < listTooltips.Count(); i++) {
    strResult = Regex.Replace(strResult , "\\b" + listTooltips[i].strWort + "\\b", "WOW");
}
于 2013-03-08T04:11:02.643 回答