使用Qt正则表达式提取全路径的文件名

原创 2015年11月18日 23:09:35

问题描述:

               给定三个全路径,例如

             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_k2
	QString pattern=(simple_filename)+"\\..+";  //构造新的正则表达式,例如:匹配nefertiti_4465_k1.txt或者nefertiti_4465_k2.txt
     QRegExp 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.obj
      QString  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中获取文件路径和文件名、后缀名

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

使用Qt正则表达式提取全路径的文件名

问题描述:                给定三个全路径,例如              path1="C:/Users/asus/Desk...

精选:深入理解 Docker 内部原理及网络配置

网络绝对是任何系统的核心,对于容器而言也是如此。Docker 作为目前最火的轻量级容器技术,有很多令人称道的功能,如 Docker 的镜像管理。然而,Docker的网络一直以来都比较薄弱,所以我们有必要深入了解Docker的网络知识,以满足更高的网络需求。

用正则表达式获取文件名和路径

用正则表达式获取文件名和路径,并介绍一下正则引擎中的NFA原理

Qt中正则表达式的使用

今天的工作中,遇到一个需求,就是界面的一个对话框中需要填入需求的字符串,因为如果填的字符串是随意的内容的话,下载到下位机上可能会使得下位机崩溃。因此我研究了一下Qt中的QLineEdit控件中使用正则...

利用正则表达式从文件路径中提取出文件名(包含后缀)

利用正则表达式从文件路径中提取出文件名(包含后缀) 如:

利用正则表达式提取docx转为txt的文件。

使用pandoc先转化docx文件。pandoc -f docx -t latex -o t33.txt testAp.docx提取出的txt格式是这样的\section{Question1}\lab...

QT的正则表达式

QRegExp是Qt的正则表达式类. Qt中有两个不同类的正则表达式. 第一类为元字符.它表示一个或多个常量表达式. 令一类为转义字符,它代表一个特殊字符.   一.元字符 .  匹配任意...

正则表达式

揭开正则表达式的神秘面纱 转载于:http://www.regexlab.com/zh/regref.htm] 引言     正则表达式(regular expr...

ios常用的读取文件路径操作以及正则表达式

// //  NSString+Common.h //  CatagoryDemo // //  Created by 张洋洋 on 14-11-13. //  Copy...

【正则表达式】最全面的常用正则表达式

一、校验数字的表达式 1 数字:^[0-9]*$ 2 n位的数字:^\d{n}$ 3 至少n位的数字:^\d{n,}$ 4 m-n位的数字:^\d{m,n}$ 5 零和非...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)