How to extract a file name from a path, replace whitespaces, and make it lowercase using RegEx in C++

1 Answer

0 votes
#include <iostream>
#include <string>
#include <regex>

std::string normalizeFilename(const std::string& filePath) {
    std::regex pattern(R"(^.*[\\/](.*)$)");
    std::smatch match;

    std::string filename = filePath;
    if (std::regex_match(filePath, match, pattern)) {
        filename = match[1];
    }

    // Replace whitespace with underscores
    std::regex whitespace(R"(\s+)");
    filename = std::regex_replace(filename, whitespace, "_");

    // Convert to lowercase
    for (char& ch : filename) {
        ch = std::tolower(static_cast<unsigned char>(ch));
    }

    return filename;
}

int main() {
    std::string filePath = R"(c:\path\to\file\WITH Whitespace1 and Whitespace2.cpp)";
    
    std::string result = normalizeFilename(filePath);
    
    std::cout << result << std::endl; 
}

 
 
/*
run:

with_whitespace1_and_whitespace2.cpp
 
*/

 



answered Jul 15, 2025 by avibootz
...