用斜线拆分字符串

时间:2012-09-10 14:01:15

标签: string qt split

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

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

还有混合斜线;

"X:/Blah\blah/"

会工作吗?在每种情况下返回:    “X:”,“Blah”,“blah”

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

3 个答案:

答案 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