我只是想知道如何通过两个前斜线(/)& 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