Подтвердить что ты не робот

С# Regex Issue "непризнанная escape-последовательность"

У меня проблема с регулярными выражениями, которые я использую, но не знаю, как их продолжить. Я получаю ошибку "непризнанная escape-последовательность".

Я пытаюсь перечислить все файлы, которые могут иметь номер телефона в форматах, перечисленных в коде ниже

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

Любая помощь очень ценится.

4b9b3361

Ответ 1

Используйте @ чтобы строки больше не использовали escape-символ \:

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

В качестве примечания, я думаю, что вы хотите, чтобы два, if в конце, было одним, if с или (||) между двумя условиями.

Ответ 2

Добавьте дополнительный '\', чтобы освободить escape. Когда он будет обработан, он будет интерпретироваться так, как вы планировали.

Ответ 3

Проблема не в регулярном выражении, а в строке. Прежде чем компилировать его в регулярное выражение с вызовом IsMatch(), введенный вами текст по-прежнему является нормальной строкой и должен подчиняться языковым правилам.

\ d в вашем языке не является признанной escape-последовательностью, поэтому ошибка. Вы можете либо удвоить обратную косую черту (\ is escape-последовательность, чтобы получить a), либо, как заметил Блинди, вы можете префикс ваших константных строк с помощью @, сообщая компилятору, что он не должен пытаться интерпретировать что-либо похожее на escape-последовательность для него.