C#Regex Issue”;无法识别的转义序列”;

本文关键字:转义序列 识别 Issue C#Regex | 更新日期: 2023-09-27 17:57:46

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

我正在尝试列出所有可能有电话号码的文件,格式如下代码所列

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

非常感谢您的帮助。

C#Regex Issue”;无法识别的转义序列”;

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

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

顺便说一句,我认为您希望末尾的两个if是单个if,在这两个条件之间有一个或(||)。

添加一个额外的''''来取消转义。当它被处理时,它将按照您想要的方式进行解释。

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

''您的语言中的d不是可识别的转义序列,因此出现错误。您可以使用双反斜杠(''是获取a的转义序列),或者,正如Blindy所指出的,您可以在常量字符串前面加上@,告诉编译器不应该试图将任何看起来像转义序列的东西解释为它。