1

Attempting to write code that will pick up all of a month's log files and zip them up. I can't see to get the RegEx pattern to work in my code. Below is a sandbox console app I'm using to test with:

public static void Main(string[] args)
{
    var targetDate = DateTime.Now.AddMonths(-1);
    var pattern = $@"c:\\logs\\client-{targetDate.Year}-{targetDate.Month:d2}-.*.log";
    Regex regex = new Regex(Regex.Escape(pattern), RegexOptions.IgnoreCase);
    var files = Directory.EnumerateFiles(@"c:\logs").Where(f => regex.IsMatch(f)).ToList();
    
    foreach(var file in files)
    {
        Console.WriteLine(file);
    }
}

The Enumerated files look like the following:

c:\logs\client-2021-03-01.log
c:\logs\client-2021-03-02.log
c:\logs\client-2021-03-03.log
c:\logs\client-2021-03-04.log
c:\logs\client-2021-03-05.log
c:\logs\client-2021-03-06.log
c:\logs\client-2021-03-07.log
c:\logs\client-2021-03-08.log
c:\logs\client-2021-03-09.log
c:\logs\client-2021-03-10.log
c:\logs\client-2021-03-11.log
c:\logs\client-2021-03-12.log
c:\logs\client-2021-03-13.log
c:\logs\client-2021-03-14.log
c:\logs\client-2021-03-15.log
c:\logs\client-2021-03-16.log
c:\logs\client-2021-03-17.log
c:\logs\client-2021-03-18.log
c:\logs\client-2021-03-19.log
c:\logs\client-2021-03-20.log
c:\logs\client-2021-03-21.log
c:\logs\client-2021-03-22.log
c:\logs\client-2021-03-23.log
c:\logs\client-2021-03-24.log
c:\logs\client-2021-03-25.log
c:\logs\client-2021-03-26.log
c:\logs\client-2021-03-27.log
c:\logs\client-2021-03-28.log
c:\logs\client-2021-03-29.log
c:\logs\client-2021-03-30.log
c:\logs\client-2021-03-31.log
c:\logs\client-2021-04-01.log
c:\logs\client-2021-04-02.log
c:\logs\client-2021-04-03.log
c:\logs\client-2021-04-05.log
c:\logs\client-2021-04-06.log
c:\logs\client-2021-04-07.log
c:\logs\client-2021-04-08.log
c:\logs\client-2021-04-09.log
c:\logs\client-2021-04-10.log
c:\logs\client-2021-04-12.log
c:\logs\client-2021-04-13.log
c:\logs\client-2021-04-14.log
c:\logs\client-2021-04-15.log
c:\logs\client-2021-04-16.log
c:\logs\client-2021-04-17.log
c:\logs\client-2021-04-18.log
c:\logs\client-2021-04-19.log
c:\logs\client-2021-04-20.log
c:\logs\client-2021-04-21.log
c:\logs\client-2021-04-22.log
c:\logs\client-2021-04-23.log
c:\logs\client-2021-04-24.log
c:\logs\client-2021-04-25.log
c:\logs\client-2021-04-26.log
c:\logs\client-2021-04-27.log

I've checked the RegEx pattern against a couple of testers, including one for .NET and it passes so I'm not sure where the discrepancy is. Any help would be greatly appreciated.

4
  • 1
    Why do you escape your regex? Commented May 6, 2021 at 20:24
  • 1
    IMHO, you don't need regex to accomplish this. Commented May 6, 2021 at 20:28
  • @Codexer I'm curious your suggested solution. Commented May 6, 2021 at 20:32
  • 2
    You just need to remove the Regex.Escape(). You escaped backslashes twice. Commented May 6, 2021 at 20:36

1 Answer 1

2

The way you escape your pattern is breaking the RegEx. Here's an example of how you can do it:

var source = @"c:\logs\client-2021-03-01.log";
var pattern = $@"c:\\logs\\client-2021-03-.*.log";

var regex = new Regex(pattern, RegexOptions.IgnoreCase);

var match = regex.Match(source); // This is now true
Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.