我只是想知道如何通过前斜线(/)和&分割字符串。反斜杠()。例如,这些类型的字符串;
"X:/Blah/blah/"
"X:\Blah\blah\"
还有混合斜线;
"X:/Blah\blah/"
会工作吗?在每种情况下返回: “X:”,“Blah”,“blah”
我相信我需要使用QRegExp http://doc.qt.io/archives/qt-4.7/qregexp.html,但我不确定我需要使用哪个字符集。
答案 0 :(得分:6)
str.split( QRegExp("[/\\\\]") );
正则表达式需要两个反斜杠来防止反斜杠字符转义]
字符,而C ++又增加了两个字符,以便传入\
文字。
答案 1 :(得分:3)
如果要解析文件名,那么如何使用QFileInfo?
QFileInfo fileInfo("c:\\test folder\\one\\test\\three.avi");
这会将所有内容转换为正斜杠。输出绝对路径时:
qDebug() << fileInfo.absolutePath();
输出将只有这样的正斜杠:
"C:/test folder/one/test"
然后,您可以使用常规split命令来获取组件:
QStringList fileParts = fileInfo.absolutePath().split("/");
答案 2 :(得分:1)
由于正则表达式的评估成本很高,可能更好的解决方案是替换字符然后拆分(假设正则表达式不会变得更复杂)。
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
。