在C#中对Regex的字典进行迭代

本文关键字:迭代 字典 中对 Regex | 更新日期: 2023-09-27 18:01:27

我有一个函数,可以查找并替换输入字符串text 的正则表达式

    public static string Replacements(string text)
    {
        string output = Regex.Replace(text, @"'b[a-zA-Z0-9.-_]+@[a-z][A-Z0-9.-]+'.[a-zA-Z0-9.-]+'b","email");
        return output;
    }

假设我想将替换正则表达式放入字典中

    static Dictionary<string, string> dict1 = new Dictionary<string, string>
    {
        {@"^('+'d{1,2}'s)?'(?'d{3}')?['s.-]'d{3}['s.-]'d{4}$", "phoneno"},
        {@"'b[a-zA-Z0-9.-_]+@[a-z][A-Z0-9.-]+'.[a-zA-Z0-9.-]+'b","email"},
    };

我想迭代字典来替换文本。我该怎么做?我在这里尝试了forloop的解决方案:在C#中迭代Dictionary的最佳方式是什么?

    public static string Replacements(string text)
    {
        string output = text;
        foreach (KeyValuePair<string, string> item in dict1)
        {
            output = Regex.Replace(text, item.Key, item.Value);
        }

        return output;
    }

但这并没有奏效。有更好的方法吗?我得到一个Argument异常是未处理的错误:

parsing "^('+'d{1,2}'s)?'(?'d{3}')?['s.-]'d{3}['s.-]'d{4}$" - Quantifier {x,y} following nothing.

在C#中对Regex的字典进行迭代

public static string Replacements(string text)
{
    string output = text;
    foreach (KeyValuePair<string, string> item in dict1)
    {
        //here replace output again
        output = Regex.Replace(output, item.Key, item.Value); 
    }

    return output;
}

如果要应用多个替换,则需要替换上一个操作的结果。