通过正则表达式替换循环

时间:2013-02-26 17:41:23

标签: c# regex

所以我有这个字符串[]:

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,因此能够将string替换为string[]中存储的不同值。它不一定是foreach循环,我知道这段代码很荒谬,但我听到它要求最清楚的问题。如果您有任何问题,请评论我。

感谢所有帮助=)

2 个答案:

答案 0 :(得分:7)

我将跳过“不要使用正则表达式解析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>

答案 1 :(得分: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++;
}
相关问题