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

結果は変更されていない文字列です。そして、私はその理由について迷っています。前述のように、リストから特定のオブジェクトを使用している場合でも、置換するWordを1つだけ配置すると機能します。だから私はリストのコードが間違っていないことを確信しています、少なくとも完全ではありません。

私が試した追加のこと:

  • 各単語の値を個別の文字列に入れ、それをRegex.Replaceに使用します。失敗した。
  • MessageBox.Show()を使用してlistTooltips [i] .strWortの値を表示し、すべてが期待どおりに出力されることを確認します。
  • Regex.Matchを使用して、上記のコードが実際に何かを検出するかどうかを確認します。そうです、すべてを検出します。なんらかの理由でistに取って代わるものではありません。
  • 正規表現を使用せず、代わりにstring.replace-methodを使用します。これは上記のループで機能しますが、フィルター/マッチモードが欠落しているため、異なる望ましくない結果が発生します。つまり、「Folgen」は「WOWn」などに置き換えられています。

それをよりよく理解するために、なぜこれが主にそうであるように振る舞うのか本当に疑問に思います。しかし、idはcorseの解決策も大好きです:-)

前もって感謝します!

4

1 に答える 1

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");
}
于 2013-03-08T04:11:02.643 に答える