使用Qt正则表达式提取全路径的文件名
问题描述:
给定三个全路径,例如
path1="C:/Users/asus/Desktop/nefertiti_4465.obj";
path2="C:/Users/asus/Desktop/nefertiti_4465_k1.txt";
path3="C:/Users/asus/Desktop/nefertiti_4465_k2.txt";
我希望说明path2和path3的文件和path1的文件是一类文件。
解决方案:
1.提取全路径的文件名,并构造新的正则表达式
QRegExp rx1("([^/]+)\\..+"); QString filename="C:/Users/asus/Desktop/nefertiti_4465.obj";//filename包含全路径,int pos=rx1.indexIn(fileName); assert(pos!=-1);QString simple_filename=rx1.cap(1)+"_k[1-2]"; //simple_filename不包含路径,nefertiti_4465_k1或者nefertiti_4465_k2QString pattern=(simple_filename)+"\\..+"; //构造新的正则表达式,例如:匹配nefertiti_4465_k1.txt或者nefertiti_4465_k2.txtQRegExp rx2(pattern);
注意:
上面语句中含有提取文件名的方法,即
QRegExp rx1("([^/]+)\\..+"); //定义正则表达式int pos=rx1.indexIn(fileName); //fileName即"C:/Users/asus/Desktop/nefertiti_4465.obj"if(pos==-1){......//匹配失败}int pos=rx1.indexIn(fileName); //匹配好的起始位置QString file=rx1.cap(0); //nefertiti_4465.objQString file2=rx1.cap(1); //nefertiti_4465 ,即正则表达式()中捕获的字符串
[^/]就是表示除了/以外的字符串,以上面为例,共有“C:”、“Users”、"asus"、"Desktop"、"nefertiti_4465.obj"与之匹配.
但是后面又加上了“\\..+”分别表示‘.’和含至少一个字符的字符串。因此匹配出的结果就是“nefertiti_4465.obj”。
其实也可以采用QRegExp rx1("[^/]+$"),表示从最后一个字符开始匹配,因此就是“nefertiti_4465.obj” ,至于cap()的用法可以查Qt的语法书。
2.采用新的正则表达式匹配
QString filename1;QString filename2;if ((rx2.indexIn(filename1)!=-1)&&(rx2.indexIn(filename2)!=-1)){..... //匹配成功,是一类文件}
参考文献:
1.《Qt Creator 快速入门》(第2版)7.3正则表达式 -------------讲的非常好!
2. “正则表达式 怎么匹配文件名?”
3. 正则表达式演示网址
4. Qt中的正则表达式
5. Qt之正则表达式 - QRegExp
附注:
标准的正则表达式因为出现一些特殊字符,在C/C++代码里使用时,必须进行转换。例如:"(\S+)\s*=\s*(\S*)"必须转换成"(\\S+)\\s*=\\s*(\\S*)"
Qt的SDK里包含一个很帮的GUI工具,可以方便我们进行这类转换并测试你的表达式。
可以在如下链接中下载: http://pan.baidu.com/s/1o6jFk2A
使用Qt正则表达式提取全路径的文件名相关推荐
- Qt 中获取文件路径和文件名、后缀名(连续多个后缀名)
QString fileName, filePath,fileSuffix; QString fullPath = QFileDialog::getOpenFileName(this,.... ...
- QT中获取文件路径、文件名、后缀
QString file_full, file_name, file_path,file_suffix ; QFileInfo fileinfo; file_full = QFileDialog::g ...
- find_first_of()和 find_last_of() 【获取路径、文件名】
string 类提供字符串处理函数,利用这些函数,程序员可以在字符串内查找字符,提取连续字符序列(称为子串),以及在字符串中删除和添加.我们将介绍一些主要函数. 1.函数find_first_of() ...
- vba不能提取服务器上文件名,从全路径文件名中获取文件名(不含路径)
从全路径文件名中获取文件名(不含路径) 方法一: Public Function gf_GetFileName(strFullPath As String) As String Dim splitLi ...
- linux如何提取文件名称,如何在Linux中提取路径和文件名的特定部分
我目前的任务是将跨多个目录的大量文件重命名为不同的标识符.如何在Linux中提取路径和文件名的特定部分 所以我有几个目录,如:B01,B02,B03等,在每个目录的文件名如img01.23495.pn ...
- linux 内核 struct file 获取文件名 全路径
获取文件名: struct file *filp; filp->f_path.dentry->d_iname 获取全路径: dentry_path_raw(filp->f_path. ...
- Linux提取文件夹中文件名,linux命令提取文件夹内特定文件的路径与文件名
最近需要实现自动化搜寻特定文件夹下的特定文件,并且需要分别保存文件路径与文件名.算然使用python的walk能够实现,但是感觉复杂了些.于是想看看linux自带的命令是否能完成这项工作. 环境 需要 ...
- linux命令行下全路径显示,显示命令及文件路径用什么命令?Linux命令知识有什么...
查看Linux系统路径用什么命令?显示命令及其相关文件全路径的命令有哪些?快速定位文件路径用什么命令?Linux运维学习中,命令是非常重要的.每年学习Linux运维技术的人们越来越多,对于初学者来说, ...
- qt当前工程相对路径_QT编程:(6)相对路径问题
QT编程:(6)相对路径问题 功能需求: (1) 单击"打开工程文件"按钮,弹出config文件夹对应的打开文件对话框,用户可在当前对话框选择所需工程文件. (2) 用户单击&qu ...
最新文章
- bos 获取数据库连接_java解析数据接口获取json对象
- 服务器磁盘空间已满但并没有什么文件,win10 D盘没多少文件,但磁盘却满了
- CLR via C#(17)--接口
- IP地址修改后ORACLE不能使用问题
- 会计期间13-16怎么用
- boost::filesystem模块Microsoft TCHAR 的使用示例的测试程序
- iOS开发 - iOS10隐私数据访问问题
- stl的multiset和set和priority_queue区别
- Babelfish (关于mapstring,string的用法
- WEB框架研究笔记七(Spring2+struts2)
- 用python画图代码-【Matplotlib】利用Python进行绘图
- 2022年上半年软考开始报名啦
- C++文件操作之写文件
- 三维模型格式总结整理
- 结对编程_我从结对编程面试中学到的东西
- ADSL上网常见故障解答
- 老徐WEB:js入门学习 - javascript语句
- JavaScript格式化字符串为指定长度
- 编程题目3——中国大学mooc(这篇博客更新完毕)
- C语言解决找零钱问题