我只是想知道如何用正斜杠 (/) 和反斜杠 () 分割字符串。例如,这些类型的字符串;
"X:/Blah/blah/"
"X:\Blah\blah\"
还有混合斜线;
"X:/Blah\blah/"
可以工作&在每种情况下都会返回:“X:”、“Blah”、“blah”
我相信我需要使用 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
。