在 C# 中迭代​​正则表达式的字典

iterating over a dictionary of Regex in C#

我有一个函数可以查找并替换输入字符串的正则表达式 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 的解决方案:What is the best way to iterate over a Dictionary in C#?

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

但是没有用。有一个更好的方法吗?我收到一个参数异常未处理的错误:

parsing "^(\+\d{1,2}\s)?\(?\d{3}\)?[\s.-]\d{3}[\s.-]\d{4}$" - Quantifier {x,y} following nothing.
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;
}

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