我只是想知道如何通過兩個前斜線(/)& backslashes()分割字符串。例如,這些類型的字符串;按斜槓分割字符串
"X:/Blah/blah/"
"X:\Blah\blah\"
還有混合斜線;
"X:/Blah\blah/"
會在每種情況下返回工作&: 「X」,「嗒嗒」,「嗒嗒」
我相信我會需要使用QRegExp,http://doc.qt.io/archives/qt-4.7/qregexp.html但我只是不知道我將需要使用哪些字符集。
我只是想知道如何通過兩個前斜線(/)& backslashes()分割字符串。例如,這些類型的字符串;按斜槓分割字符串
"X:/Blah/blah/"
"X:\Blah\blah\"
還有混合斜線;
"X:/Blah\blah/"
會在每種情況下返回工作&: 「X」,「嗒嗒」,「嗒嗒」
我相信我會需要使用QRegExp,http://doc.qt.io/archives/qt-4.7/qregexp.html但我只是不知道我將需要使用哪些字符集。
str.split(QRegExp("[/\\\\]"));
正則表達式需要兩個反斜槓來防止反斜槓字符逸出]
字符,和C++增加額外的兩個,這樣你正在傳遞\
文字。
如果您正在解析文件名,那麼使用QFileInfo怎麼樣?
QFileInfo fileInfo("c:\\test folder\\one\\test\\three.avi");
這將一切正斜槓轉換。當你輸出的絕對路徑:
qDebug() << fileInfo.absolutePath();
輸出將只是有斜槓是這樣的:
"C:/test folder/one/test"
然後,您可以使用常規的拆分命令,因此要獲得的組件:
QStringList fileParts = fileInfo.absolutePath().split("/");
由於正則表達式可能是昂貴的評估,也許更好的解決方案將取代字符,然後拆分(假設正則表達式不會變得更復雜)。
QString string = someFilePath();
//replace one char with another, requires no memory allocation
string.replace('\\', '/', Qt::CaseSensitive);
//you may want to use QString::KeepEmptyParts instead
QStringList pathElements = string.split('/', QString::SkipEmptyParts, Qt::CaseSensitive);
這樣就不需要編譯正則表達式並對其進行評估。這應該使它快一點。另外QRegExp
不是最好的常規表達式實現,這就是爲什麼在Qt 5中有一個新類QRegularExpression
,它在內部使用PCRE
。
感謝您的答覆,但它不支持後擋板。只有正斜槓。我怎樣才能得到反斜槓支持? – Danran
它在我的測試反斜槓上工作... – Chris
我明白我做錯了什麼。我在我的路徑中提供了只有一個反斜槓的字符串。因此這被忽略了。好吧,我決定只是將所有內容都替換成反斜槓,但謝謝你的答案。 – Danran