Возможно ли сделать switch case по регулярному выражению?
bool IsMatch(string someString)
{
    var patterns = new[]
    {
        "someExpr1",
        "someExpr2",
        "someExpr3"
    };

    return patterns.Any(pattern => Regex.IsMatch(someString, pattern));
}
Читабельнее чем case или if, сразу видно по каким pattern`ам ищутся совпадения.
Any не будет проверять все patterns, выйдет при первом найденном и вернёт true
А чтобы сделать так, как вы ходите, вот оно:var someStr = "someValue";
switch (true)
{
    case Regex.IsMatch(someStr, "somePattern1")
        // do...
        break;
    case Regex.IsMatch(someStr, "somePattern2")
        // do...
        break;
    case Regex.IsMatch(someStr, "somePattern3")
        // do...
        break;
}
Это будет, предположительно, работать с C#7, который ещё не вышел.
Для вашего случая можете попробовать что-то такоеvoid Main()
{
    var fileNameList = new List<string> { "fileNameOne", "fileNameTwo" };
    foreach (var fileName in fileNameList)
    {
        var fileAction = FileActions.FirstOrDefault(x => Regex.IsMatch(fileName, x.Key));
        if (fileAction.Key != null)
            fileAction.Value(fileName);
    }
}

IDictionary<string, Action<string>> FileActions = new Dictionary<string, Action<string>>
{
    { "somePatternOne", SomeActionOne },
    { "somePatternTwo", SomeActionTwo }
};

void SomeActionOne(string fileName) { /* Do... */ }
void SomeActionTwo(string fileName) { /* Do... */ }
Если код парсинга для каждого файла значительно отличается и кода много, вместо методов можно использовать классы (полиформизм)
switch case ищет соответствие переменной string и ее возможное значение в case. Что вы хотите сопоставить? Что в переменной string хранится какое-то регулярное выражение? Или что string соответствует одному из регулярных выражений? Если второе, то ваш путь if else if.