2012-09-10 2 views
2

Мне просто интересно, как я могу разделить строку обоими косыми чертами (/) & обратная косая черта(). Так, например, эти типы строк;Разбиение строк на косые черты

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

А также смешанные косые черты;

"X:/Blah\blah/" 

будет работать & в каждом случае возвращении: «X:», «Л», «л»

Я считаю, что мне нужно будет использовать QRegExp, http://doc.qt.io/archives/qt-4.7/qregexp.html, но я просто не уверен, какой набор символов мне нужно будет использовать.

ответ

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

Регулярное выражение необходимо два обратных слэша, чтобы предотвратить обратный слэш от побега ] характер, и C++ добавляет дополнительные два, так что вы передаете в \ литералов.

+0

Спасибо за ответ, однако он не поддерживает backslahes. Только косые черты. Как я могу получить поддержку обратной косой черты? – Danran

+0

Он работает на обратную косую черту в моих тестах ... – Chris

+0

Я вижу, что я сделал не так. Я снабжал струны только одной обратной косой чертой на моем пути. Таким образом, это игнорировалось. Ах, хорошо, я решил в любом случае заменить все на обратную косую черту, но спасибо за ответ. – Danran

3

Если вы разбираете имена файлов, как насчет использования QFileInfo?

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

Это преобразует все в косые черты. Когда вы выводите абсолютный путь:

qDebug() << fileInfo.absolutePath(); 

Выход просто слэша так:

"C:/test folder/one/test" 

Вы можете использовать регулярные команды раздвоение, как так, чтобы получить компоненты:

QStringList fileParts = fileInfo.absolutePath().split("/"); 
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 внутренне.

Смежные вопросы