问题描述:

给定三个全路径,例如

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正则表达式提取全路径的文件名相关推荐

  1. Qt 中获取文件路径和文件名、后缀名(连续多个后缀名)

    QString fileName, filePath,fileSuffix;     QString fullPath = QFileDialog::getOpenFileName(this,.... ...

  2. QT中获取文件路径、文件名、后缀

    QString file_full, file_name, file_path,file_suffix ; QFileInfo fileinfo; file_full = QFileDialog::g ...

  3. find_first_of()和 find_last_of() 【获取路径、文件名】

    string 类提供字符串处理函数,利用这些函数,程序员可以在字符串内查找字符,提取连续字符序列(称为子串),以及在字符串中删除和添加.我们将介绍一些主要函数. 1.函数find_first_of() ...

  4. vba不能提取服务器上文件名,从全路径文件名中获取文件名(不含路径)

    从全路径文件名中获取文件名(不含路径) 方法一: Public Function gf_GetFileName(strFullPath As String) As String Dim splitLi ...

  5. linux如何提取文件名称,如何在Linux中提取路径和文件名的特定部分

    我目前的任务是将跨多个目录的大量文件重命名为不同的标识符.如何在Linux中提取路径和文件名的特定部分 所以我有几个目录,如:B01,B02,B03等,在每个目录的文件名如img01.23495.pn ...

  6. linux 内核 struct file 获取文件名 全路径

    获取文件名: struct file *filp; filp->f_path.dentry->d_iname 获取全路径: dentry_path_raw(filp->f_path. ...

  7. Linux提取文件夹中文件名,linux命令提取文件夹内特定文件的路径与文件名

    最近需要实现自动化搜寻特定文件夹下的特定文件,并且需要分别保存文件路径与文件名.算然使用python的walk能够实现,但是感觉复杂了些.于是想看看linux自带的命令是否能完成这项工作. 环境 需要 ...

  8. linux命令行下全路径显示,显示命令及文件路径用什么命令?Linux命令知识有什么...

    查看Linux系统路径用什么命令?显示命令及其相关文件全路径的命令有哪些?快速定位文件路径用什么命令?Linux运维学习中,命令是非常重要的.每年学习Linux运维技术的人们越来越多,对于初学者来说, ...

  9. qt当前工程相对路径_QT编程:(6)相对路径问题

    QT编程:(6)相对路径问题 功能需求: (1) 单击"打开工程文件"按钮,弹出config文件夹对应的打开文件对话框,用户可在当前对话框选择所需工程文件. (2) 用户单击&qu ...

最新文章

  1. bos 获取数据库连接_java解析数据接口获取json对象
  2. 服务器磁盘空间已满但并没有什么文件,win10 D盘没多少文件,但磁盘却满了
  3. CLR via C#(17)--接口
  4. IP地址修改后ORACLE不能使用问题
  5. 会计期间13-16怎么用
  6. boost::filesystem模块Microsoft TCHAR 的使用示例的测试程序
  7. iOS开发 - iOS10隐私数据访问问题
  8. stl的multiset和set和priority_queue区别
  9. Babelfish (关于mapstring,string的用法
  10. WEB框架研究笔记七(Spring2+struts2)
  11. 用python画图代码-【Matplotlib】利用Python进行绘图
  12. 2022年上半年软考开始报名啦
  13. C++文件操作之写文件
  14. 三维模型格式总结整理
  15. 结对编程_我从结对编程面试中学到的东西
  16. ADSL上网常见故障解答
  17. 老徐WEB:js入门学习 - javascript语句
  18. JavaScript格式化字符串为指定长度
  19. 编程题目3——中国大学mooc(这篇博客更新完毕)
  20. C语言解决找零钱问题

热门文章

  1. vue3.x通过ref属性获取元素
  2. Angular自学笔记(?)TemplateRef和ViewContainerRef
  3. WCF basicHttpBinding之Message Security Mode
  4. DHCP服务器 出现的故障
  5. vue组件调用(全局调用和局部调用)
  6. 本地计算机绑定域名访问
  7. 简单工厂模式,工厂方法模式,抽象工厂模式,spring的狂想
  8. multiselect多选下拉框
  9. 福昕PDF阅读器的图章妙用
  10. 标准模板库(STL)学习指南之List容器