32

I have an issue with the regular expressions I'm using but don't know how to continue with them. I get the error "unrecognized escape sequence".

I am trying to list out all files that could have a phone number in the formats listed in the code below

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

Any help is much appreciated.

2

3 Answers 3

90

Use @ to make the strings no longer use the escape character \:

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

As a side note, I think you want the two ifs at the end to be a single if with an or (||) between the two conditions.

Sign up to request clarification or add additional context in comments.

6 Comments

I could be wrong, and this may be a new format, but a string literal needs the @ before the quote, not the variable name.
@Blindy: You can be lucky there is no changelog for the answer yet ;p
Well, for what it's worth, @identifier is valid C# syntax <.<
@Blindly Thanks. Also for the thought of combining the if statements. Now it accepts my regex but i'm not getting any files returned and I know that it should be returning stuff... weird. I made a text file with those patterns in it.
@Blake, give me an example of the file names you made. They should be like 123.456.1234 with nothing else around them.
|
9

Add an additional '\' to unescape the escape. When it's processed it will then be interpreted in the manner you intended.

1 Comment

+1 because this works beautifully in the rare case that you have to escape a double quote (") character. (ex. \\\")
5

The problem is not the regex, but the string. Before compiling it to a regex with the call to IsMatch(), the text you enter is still a normal string and it must obey the language rules.

\d in your language is not a recognized escape sequence, hence the error. You can either double backslashes (\ is the escape sequence to get a ) or, as Blindy pointed out, you can prefix your constant strings with a @, telling the compiler that it should not try to interpret anything looking like an escape sequence to it.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.