C#正则表达式"无法识别的转义序列"

Bla*_*ers 24 c# regex

我有正在使用的正则表达式的问题,但不知道如何继续使用它们.我收到错误"无法识别的转义序列".

我试图列出所有可能具有以下代码中列出的格式的电话号码的文件

static void Main(string[] args)

    {
        //string pattern1 = "xxx-xxx-xxxx";
        //string pattern2 = "xxx.xxx.xxxx";
        //string pattern3 = "(xxx) xxx-xxxx";

        string[] fileEntries = Directory.GetFiles(@"C:\BTISTestDir");

        foreach (string filename in fileEntries)
        {
            StreamReader reader = new StreamReader(filename);
            string content = reader.ReadToEnd();
            reader.Close();

            string regexPattern1 = "^(\d{3}\.){2}\d{4}$";
            string regexPattern2 = "^((\(\d{3}\) ?)|(\d{3}-))?\d{3}-\d{4}$";

            if(Regex.IsMatch(content, regexPattern1))
                Console.WriteLine("File found: " + filename);
            if(Regex.IsMatch(content, regexPattern2))
                Console.WriteLine("File found: " + filename);
        }

        Console.WriteLine(Environment.NewLine + "Finished");
        Console.ReadLine();
    }
Run Code Online (Sandbox Code Playgroud)

任何帮助深表感谢.

Bli*_*ndy 72

使用@使串不再使用转义字符\:

string regexPattern1 = @"^(\d{3}\.){2}\d{4}$";
string regexPattern2 = @"^((\(\d{3}\) ?)|(\d{3}-))?\d{3}-\d{4}$";
Run Code Online (Sandbox Code Playgroud)

作为旁注,我认为你希望最后的两个ifs 是两个条件之间if带有或(||)的单个.


小智 7

添加一个额外的'\'来转义转义.当它被处理时,它将以你想要的方式解释.


小智 5

问题不在于正则表达式,而在于字符串。在通过调用 IsMatch() 将其编译为正则表达式之前,您输入的文本仍然是普通字符串,并且必须遵守语言规则。

\d 在您的语言中不是可识别的转义序列,因此会出现错误。您可以使用双反斜杠(\ 是获得 a 的转义序列),或者正如 Blindy 指出的那样,您可以在常量字符串前加上 @ 前缀,告诉编译器它不应该尝试解释任何看起来像转义序列的内容。