使用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


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/259071.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/259071.shtml
英文地址,請注明出處:http://en.pswp.cn/news/259071.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Beyond Compare 3.3.8 build 16340 + Key

本文摘錄自冰點社區:http://forum.z27315.com/topic/14746-beyond-compare-338-build-16340-key/ Download Beyond Compare 3 Current Version: 3.3.8, build 16340, released June 19, 2013 Windows 版本 Windows Standard and Pro EditionsEnglish version 5800k…

hdu 1198 Farm Irrigation

題目鏈接: http://acm.hdu.edu.cn/showproblem.php?pid1198 題目大意: 有一大塊土地需要澆水,這塊土地由很多的小塊土地(有十一種)組成,小塊土地上有水溝,問至少需要建幾個井,才能灌…

strcpy_s、sptintf_s與strcat_s的使用

strcpy_s、sptintf_s與strcat_s是strcpy、sptintf與strcat的安全版本,均是通過指定緩沖區長度來避免存在的溢出風險。 strcpy_s 與strcpy strcpy_s和strcpy函數的功能幾乎是一樣的。strcpy函數,就象gets函數一樣,它沒有方法來保證有效的緩沖…

小米一鍵上鎖工具_小米首款高端全自動智能鎖火熱預售中,一觸開啟全自動時代...

近些年,隨著科技的發展,人工智能逐漸走入大眾視野。人類社會也正從信息時代向“智能時代”過渡,在整個過程中智能家居領域的蓬勃發展可謂當仁不讓,一直備受用戶矚目。智能鎖作為家的第一道守護防線,家庭物聯網入口的關…

Eigen+suitesparse for windows 安裝

Eigen是著名的C矩陣運算庫,提供了許多矩陣運算的接口,主要包括兩大部分,一部分是稠密矩陣,另一部分是稀疏矩陣。Eigen以源碼形式提供給大家,用的時候,只要將源碼包含在項目的包含路徑上,具體安裝…

軟件盤控制的問題

2019獨角獸企業重金招聘Python工程師標準>>> 在全屏模式或者是沉寢室標題欄 方案一:全屏模式 1.軟鍵盤被EditText遮擋住了,如果說EditText被嵌套在有滑動的視圖中,采取的方式是: activity中設置此屬性 android:windowSoftInputMode"…

python語言學習零基礎教學視頻_Python告白小白視頻教程(零基礎入門)

1 Python編程基礎入門篇通過本次課程的學習,我們每個人都可以進入python世界里,從簡單到高級,讓人人都能學會python,我們在學習的時候,python讓我們的運維變得更有樂趣,讓我們的運維更加的高大上&#xff0…

SQL 快速入門2.1

MySQL top(MySQL limit)語法 SELECT column_name(s) FROM table_name LIMIT number 例子 SELECT * FROM Persons LIMIT 5 SQL LIKE 操作符 SQL LIKE 操作符語法 SELECT column_name(s) FROM table_name WHERE column_name LIKE pattern 原始的表 (用在例…

sencha touch 入門系列 (一)sencha touch 簡介

參考鏈接:http://mobile.51cto.com/others-278381.htm Sencha touch 是基于JavaScript編寫的Ajax框架ExtJS,將現有的ExtJS整合JQTouch、Raphaël庫,推出適用于最前沿Touch Web的移動應用開發框架,該框架是世界上第一個 基于HTML5的Mobile App框架…

求二叉樹的深度和寬度

// 求二叉樹的深度和寬度.cpp : 定義控制臺應用程序的入口點。 <pre name"code" class"cpp">#include <iostream> #include <queue> using namespace std;struct BTNode {char m_value;BTNode *m_left;BTNode *m_right; };//先序創建二叉…

漢堡包

在我們結對的這些天里&#xff0c;我清晰的感受到同伴對我的幫助&#xff0c;每當我有不懂的時候她都會積極的幫助我&#xff0c;也會聽取我的意見積極配合我&#xff0c;在我懶惰的時候也能夠提醒督促我&#xff0c;我想這些只有結對時才能體會到。我們都知道&#xff0c;結對…

zabbix自動發現監控磁盤(iops和讀寫量)

2019獨角獸企業重金招聘Python工程師標準>>> 對于磁盤有個iops的概念比較奇怪&#xff0c;想監控起來看下&#xff0c;利用zabbix的自動發現把每個磁盤的iops監控起來&#xff0c;思路&#xff1a;自動發現所有的磁盤&#xff0c;然后監控各個磁盤的iops。效果如下圖…

一個表單同時向兩個頁面傳值

現在有一個表單<form action"AddNewstu.asp" METHOD"POST" ><INPUT TYPE "Text" NAME "name" SIZE "20"><BR></FORM>此表單向AddNewstu.asp頁面傳入了一個name的值&#xff0c;如果同時把name…

matlab內置函數fitgeotrans與transformPointsForward解析

最近研究3000fps的實現&#xff0c;看了網上給的一個matlab代碼&#xff0c;里面有提到init_shape到mean_shape的對齊&#xff0c;里面使用了fitgeotrans和transformPointsForward兩個函數。于是參考matlab help研究了一下這兩個函數. fitgeotrans函數 語法: tform fitgeotr…

【電腦使用經驗】怎么查看無線網絡中電腦的IP地址?

1、 2、 3、 4、 5、 轉載于:https://www.cnblogs.com/happykoukou/p/4437111.html

win8硬盤安裝Ubuntu14.04雙系統參考教程

硬盤安裝&#xff0c;無需光盤、U盤。win8為主。Ubuntu14.04為輔。可將Windows或Ubuntu設置為開機默認啟動項。在Ubuntu下可查看、操作Windows系統下的文件&#xff1b;適用于安裝和14.04版本號相近的Ubuntu系統。假設以上所述正是你所須要的。那么這可能是一篇您值得參考的教程…

oracle nvarchar2,varchar2,char,nchar說明

char(size)&#xff1a; 數據長度為size&#xff0c;不足的用空格補&#xff0c;超出后報錯。char類型的數據最大長度是2000字節或字符&#xff0c;每個字符長度依賴于數據庫字符集&#xff0c;數據按字符存儲還是字節存儲取決于nls_length_semantics參數。如果每個字符占兩個字…

散列表查找失敗平均查找長度_Python數據結構與算法56:排序與查找:沖突解決方案...

注&#xff1a;本文如涉及到代碼&#xff0c;均經過Python 3.7實際運行檢驗&#xff0c;保證其嚴謹性。本文閱讀時間約為6分鐘。前面說過&#xff0c;如果兩個數據項被散列映射到同一個槽&#xff0c;需要一個系統化的方法在散列表中保存第二個數據項&#xff0c;這個過程被稱為…

Face Alignment by 3000 FPS系列學習總結(一)

廣播&#xff1a; 如今的opencv已經提供了LBF的訓練和測試代碼&#xff0c;推薦閱讀 《使用OpenCV實現人臉關鍵點檢測》 face alignment 流程圖 train階段 測試階段 預處理 裁剪圖片 tr_data loadsamples(imgpathlistfile, 2); 說明&#xff1a; 本函數用于將原始圖片取…

acm常見算法及例題

1 acm常見算法及例題2 3 初期:4 一.基本算法:5 (1)枚舉. (poj1753,poj2965)6 (2)貪心(poj1328,poj2109,poj2586)7 (3)遞歸和分治法.8 (4)遞推.9 (5)構造法.(poj3295)10 (6)模擬法.(poj1068,poj2632,poj1573,poj2993,poj2996)11 二.圖算法…