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

最终,我只是问是否有可能以某种方式循环 a Regex,因此能够string用存储在 a 中的不同值替换 a string[]。它不一定是一个foreach循环,我知道这段代码很荒谬,但我把它听出来是为了问最清楚的问题。请评论您对我的任何问题。

感谢所有帮助 =)

4

2 回答 2

8

我将跳过“不要使用 Regex 解析 HTML”的讨论,并建议您查看采用 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 回答