2

我只是想知道如何用正斜杠 (/) 和反斜杠 () 分割字符串。例如,这些类型的字符串;

"X:/Blah/blah/"
"X:\Blah\blah\"

还有混合斜线;

"X:/Blah\blah/"

可以工作&在每种情况下都会返回:“X:”、“Blah”、“blah”

我相信我需要使用 QRegExp,http ://doc.qt.io/archives/qt-4.7/qregexp.html但我只是不确定我需要使用什么字符集。

4

3 回答 3

7
str.split( QRegExp("[/\\\\]") );

正则表达式需要两个反斜杠以防止反斜杠字符转义]字符,而 C++ 添加了另外两个反斜杠,以便您传递\文字。

于 2012-09-10T15:24:18.450 回答
3

如果是解析文件名,使用 QFileInfo 怎么样?

QFileInfo fileInfo("c:\\test folder\\one\\test\\three.avi");

这会将所有内容转换为正斜杠。输出绝对路径时:

qDebug() << fileInfo.absolutePath();

输出将只有这样的正斜杠:

"C:/test folder/one/test"

然后,您可以使用常规拆分命令来获取组件:

QStringList fileParts = fileInfo.absolutePath().split("/");
于 2012-09-11T03:13:48.007 回答
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

于 2012-09-11T12:52:59.937 回答