2015-05-27 2 views
0

Я недавно начал работать над QT. У меня есть некоторые операции с QString. Мне нужно получить вспомогательную строку основной строки, используя регулярное выражение, соответствующее пути файла в строке.Как получить подстроку из QString с помощью QRegExp?

я хочу что-то вроде следующего:

QString str=" My file is strored on C:\My Folder\Files\Test.txt , and i need to move it." 

QRegExp rx("([a-zA-Z]:\\(?:[^\\:]+\\)*((?:[^:\\]+)\.\w+))"); //matches file path 

if(str.contains(rx)) 
{ 
     Qstring path=str.substring(rx); 
     QMessageBox msgBox; 
     msgBox.setText(path); // where path is "C:\My Folder\Files\Test.txt" . 
     msgBox.exec(); 
} 

Я искал функцию, которая возвращает строку к югу, но до сих пор я не нашел. Некоторые функции, такие как left(), right(), mid(), выполняют некоторую подобную задачу, но не точную. Поэтому, пожалуйста, кто-нибудь скажет мне, как я могу это сделать.

+0

Похоже, дубликат этого: http://stackoverflow.com/questions/18374694/how-to-extract-a-list-of-substring-from-a -string-use-qt-regexp – danielfranca

+1

Я не очень хорошо разбираюсь в 'QRegExp', но если вы добавите двойную обратную косую черту по пути, coz qt не сможет понять вашу форму, вы можете получить qstringlist с двумя элементами, отсортировать его с помощью' QStringList :: sort() 'и получите максимальную длину. 'QString str =" Мой файл хранится на C: \\ My Folder \\ Files \\ Test.txt, и мне нужно его переместить. "; QRegExp rx ("\\ w: (\\\\ [a-zA-Z] + \\ s * [a-zA-Z] +) * \\\\ [a-zA-Z0-9] + \ .txt ");' –

+0

Таким образом, я получаю ("C: \ My Folder \ Files \ Test.txt", "\ Files"), первый элемент выглядит так, как вам нужно. –

ответ

3

Я полагаю, что вы ищете QRegExp::capturedTexts(). Пример из official documantation:

QRegExp rx("(\\d+)(\\s*)(cm|inch(es)?)"); 
int pos = rx.indexIn("Length: 36 inches"); 
QStringList list = rx.capturedTexts(); 
// list is now ("36 inches", "36", " ", "inches", "es") 
Смежные вопросы