7

だから私はこの文字列を持っています[]:

string[] middleXMLTags = {"</Table1><Table2>", "</Table2><Table3>"};

そして、私はそれでこのようなことをしたいです:

int i = 0;
foreach (regex where it finds the replacement string)
{
    response = Regex.Replace(response, "</Table><Table>", middleXMLTags[i]);
    i++;
}
response = Regex.Replace(response, "<Table>", <Table1>);
response = Regex.Replace(response, "</Table>", </Table3>);

最終的には、を何らかの方法でループできるかどうかを尋ねているだけなので、に格納されているさまざまな値Regexに置き換えることができます。ループである必要はなく、このコードがばかげていることは知っていますが、可能な限り明確な質問をするように聞いています。質問があればコメントしてください。stringstring[]foreach

すべての助けをありがとう=)

4

2 に答える 2

8

「HTML を Regex で解析しない」という議論はスキップし、MatchEvaluator デリゲートを取る Regex.Replace のオーバーロードを確認することをお勧めします。

基本的に、一致ごとに呼び出されて置換テキストを返す Replace() メソッドにデリゲートを渡すことができます。

このMSDNページには、インデックス番号を置換テキストに入れる例が示されています。配列へのインデックスを使用して、置換テキストを取得できるはずです。

あなたの例を反映したサンプルを次に示します。

string[] middleXMLTags = {"</Table1><Table2>", "</Table2><Table3>"};

string response = "</Table><Table><foo/></Table><Table>";
Console.WriteLine(response);
int i = 0;

response = Regex.Replace(response,@"</Table><Table>",m=>middleXMLTags[i++]);
Console.WriteLine(response);

出力:

</Table><Table><foo/></Table><Table>
</Table1><Table2><foo/></Table2><Table3>
于 2013-02-26T18:03:52.097 に答える
6

置換文字列を列挙できます。ニーズに合わせて調整する必要がありますが、このようなものがうまくいくと思います。

Regex needle = new Regex("\[letter\]");
string haystack = "123456[letter]123456[letter]123456[letter]";
string[] replacements = new string[] { "a", "b", "c" };

int i = 0;
while (needle.IsMatch(haystack))
{
    if (i >= replacements.Length)
    {
        break;
    }

    haystack = needle.Replace(haystack, replacements[i], 1);
    i++;
}
于 2013-02-26T18:27:49.600 に答える