我有正在使用的正则表达式的问题,但不知道如何继续使用它们.我收到错误"无法识别的转义序列".
我试图列出所有可能具有以下代码中列出的格式的电话号码的文件
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();
    }
任何帮助深表感谢.
Bli*_*ndy 72
使用@使串不再使用转义字符\:
string regexPattern1 = @"^(\d{3}\.){2}\d{4}$";
string regexPattern2 = @"^((\(\d{3}\) ?)|(\d{3}-))?\d{3}-\d{4}$";
作为旁注,我认为你希望最后的两个ifs 是两个条件之间if带有或(||)的单个.
小智 5
问题不在于正则表达式,而在于字符串。在通过调用 IsMatch() 将其编译为正则表达式之前,您输入的文本仍然是普通字符串,并且必须遵守语言规则。
\d 在您的语言中不是可识别的转义序列,因此会出现错误。您可以使用双反斜杠(\ 是获得 a 的转义序列),或者正如 Blindy 指出的那样,您可以在常量字符串前加上 @ 前缀,告诉编译器它不应该尝试解释任何看起来像转义序列的内容。