C++使用正则表达式分解文件路径(获取各级路径、文件名、上级文件夹路径)

        正则表达式是一种处理字符串强有力的工具,在先前用Python做NLP相关的工作时,曾使用Python的正则库(re)进行数据的清洗,最近在做图像处理时需要多次存储处理后的文件,多次指定路径过于麻烦,便想到了使用正则表达式对输入文件的路径进行分解,以便将处理后的文件存储于输入文件相同的上级目录中。

1、正则表达式的简介以及基本方法

       关于正则表达式的相关背景介绍以及基本方法,这里不赘述,详情请看菜鸟网站

2、在C++中使用正则表达式的方法

#include <regex> //引入正则表达式头文件
#include <iostream>
using namespace std;
int main()
{
    // 输入文件路径
    string FilePath = "D:/VSCode-workspace/VSC_map_algebra/filebox/SourceFile.bmp";
    // 定义正则表达式(获取输入文件的上级目录以及文件名称)
    regex Pattern("(^.+\/)(.+).bmp", regex_constants::extended);
    // 声明匹配结果变量
    match_results<string::const_iterator> Result;
    // 进行局部匹配
    bool Valid = regex_search(FilePath, Result, Pattern);
    if (Valid)
    {
        for (unsigned i = 0; i < Result.size(); i++)
            cout << Result[i].str() << endl;
        
        string temp = Result[1].str();                //使用smatch Result类中的str方法转化为string类
        temp.append(Result[2].str() + "_Result.bmp"); //增加新的文件名
        const char *Directory = temp.c_str();         //使用string类中的c_str方法转化为const char*类型
        cout << Directory << endl;
        
        return 1;
    }
    cout << "False" << endl;
    return 0;
}

         以上代码根据输入的.bmp文件的路径,获取了文件的名称(不含后缀名)以及文件所在的上级目录,输出结果如下:

图1 输出结果

          在C++使用regex库中的正则表达式基本方法见代码段main函数的前四行,这里比较关键的是第二行中定义的正则表达式模式:

图2 定义正则表达式模式代码段

         绿色双引号之间的部分是我们需要按照需求自己定义的正则表达式,其中第一个括号对应结果Result[1]中的值,第二个括号对应结果Result[2]中的值,Result[0]默认会将查找结果拼合起来,可以忽略。对于表达式的具体解释,这里不详述,可见菜鸟网站;对于regex正则表达式更加详细的使用方法,可见链接

3、将获取路径(字符串)进行处理

        因为需要进行文件的读写,这里需要将Smatch Result类型的变量转换为const char *类型,我使用的方法如下:

图3 处理正则表达式的匹配结果

4、实现其它功能的一些正则表达式模式 

    // 获取输入文件的上上级目录,位于Result[1]中
    regex Pattern_1("(^.+\/)(.+)\/(.+).bmp", regex_constants::extended);
    // 获取输入文件的上上上级目录,位于Result[1]中
    regex Pattern_2("(^.+\/)(.+)\/(.+)\/(.+).bmp", regex_constants::extended);
    // 获取输入文件的根目录,位于Result[1]中
    regex Pattern_3("(^.+?\/)(.+).bmp", regex_constants::extended);
    // 获取输入文件的名称(含后缀名),位于Result[2]中
    regex Pattern_4("(.+\/)(.+.bmp)", regex_constants::extended);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值