关闭

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

标签: 正则表达式Qt
1798人阅读 评论(0) 收藏 举报
分类:

问题描述:

               给定三个全路径,例如

             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


0
0
查看评论

qt正则表达式类QRegExp

qt正则表达式类QRegExp
  • qq_33557833
  • qq_33557833
  • 2017-09-19 23:22
  • 181

Qt——正则表达式

源地址:http://www.cnblogs.com/hellovenus/p/4984751.html 在项目中经常会遇到对字符串进行操作的情况,我们可以直接使用QString的一些函数,但QT提供了一个更加强大的类——QRegExp,使用正则表达式来操作字符串。 ...
  • u011430225
  • u011430225
  • 2017-04-14 14:59
  • 2975

QT中的QRegExp学习(正则表达式)

QT中的QRegExp学习(正则表达式) 下面是例子: [ABCD] 或 [A-D] 表示匹配A B C D中的其中一个 x{1,1} 匹配x一次,仅一次  x{1,5} 表示匹配x次数>=1 [0-9]{1,1}  匹配0-9中的数字一次,仅一次  [...
  • ljt350740378
  • ljt350740378
  • 2015-12-02 16:21
  • 3472

qt之正则表达式

QRegExp是Qt的正则表达式类. Qt中有两个不同类的正则表达式. 第一类为元字符.它表示一个或多个常量表达式. 令一类为 转义字符,它代表一个特殊字符. 一.元字符 .  匹配任意单个字符.例如, 1.3 可能是1. 后面跟任意字符,再跟3 ^ 匹配字符串首. 例如, ^...
  • phay
  • phay
  • 2012-02-29 08:54
  • 34323

Qt学习:正则表达式 - QRegExp

用正则表达式验证文本有效性 你可以使用QRegExp::exactMatch来判断一个字符串是否符合一个pattern。 void testRegexMatch() { QString pattern(".*=.*"); QRegExp rx(patte...
  • u013007900
  • u013007900
  • 2015-03-06 15:51
  • 1624

Qt QRegExp正则表达式学习及应用

Qt的SDK里包含一个很帮的GUI工具,可以方便我们进行这类转换并测试你的表达式。可以按照如下的方式打开:“开始”->“程序”->“Qt SDK by Nokia v2010.02.1 (open source)”->“QtDemo”->“Tools”->“Regula...
  • wang_xuehen
  • wang_xuehen
  • 2012-04-13 23:02
  • 25476

Qt 正则表达式(QRegExp)

正则表达式是对字符串操作的一种逻辑公式,匹配一系列符合某个句法规则的字符串。Qt的正则表示类是QRegExp,在很多情况下都可以用到,比如字符串验证、字符串搜索、搜索并替换、字符串分割等。QRegExp 的默认匹配模式和Perl语言正则表达式类似。此外QRegExp还提供了一个简化的通配符模式(wi...
  • lingyun0
  • lingyun0
  • 2014-12-17 22:25
  • 5231

Qt中正则表达式的使用

今天的工作中,遇到一个需求,就是界面的一个对话框中需要填入需求的字符串,因为如果填的字符串是随意的内容的话,下载到下位机上可能会使得下位机崩溃。因此我研究了一下Qt中的QLineEdit控件中使用正则表达式。首先查了一些文档,并且对此进行设置,发现只要新建一个QLineEdit后调用其中的QLine...
  • qq_19528953
  • qq_19528953
  • 2016-09-18 20:03
  • 2150

qt字符串的正则表达式查找

以下正则表达式全部通过qt的类QRegExp实现。 正则表达式知识完全
  • shaochat
  • shaochat
  • 2014-11-06 11:11
  • 5869

Qt通过QRegExp类来实现输入的有效性判断与正则表达式的学习

在做项目的过程中我们经常会遇到输入数字、字母这类的问题,有时候需要判断用户输入的信息是否按要求输入,这里就用到了正则表达式,Qt中QRegExp是正则表达式类。QRegExpValidator类是用来检查一个字符串正则表达式。下面使用QRegExp通过一个例子来讲解对输入的整数与小数的判断,然后在介...
  • Andy_93
  • Andy_93
  • 2016-10-08 22:37
  • 3186
    个人资料
    • 访问:309222次
    • 积分:4351
    • 等级:
    • 排名:第8264名
    • 原创:118篇
    • 转载:82篇
    • 译文:8篇
    • 评论:107条
    个人网站
    最新评论