С# 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();
}
Любая помощь очень ценится.
Ответы
Ответ 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-последовательность для него.