// У меня например вывод такой:
QString output = "Package Version\n"\
"---------- -------\n"\
"pip 19.2.3\n"\
"PyQt5 5.14.1\n"\
"PyQt5-sip 12.7.1\n"\
"setuptools 41.2.0\n"\
"WARNING: You are using pip version 19.2.3, however version 20.1 is available.\n"\
"You should consider upgrading via the 'python -m pip install --upgrade pip' command.\n";
// Очень удачно что у меня помимо самих модулей еще и лишний мусор в виде варнинга
QMap<QString,QString> modules; // сюда соберем инфу о модулях
foreach (QString str, output.split("\n")) { // разобъем вывод на строки и будем работать с каждой из них
QStringList record = str.split(" ",QString::SkipEmptyParts); // строку разобъем по разделителю "пробел", пропуская "пустые" секции (т.е. пробелов разделителей может быть несколько)
if(record.count()==2){ // у нас должно остаться две записи - название модуля и версия
QRegExp re("(^[\\d|\\.]*$)"); // регулярка для проверки что строка "похожа" по виду на номер версии - в строке есть только цифры и точки
if(re.indexIn(record.last())!=-1) // проверяем строку по регулярному выражению
modules.insert(record.first(),record.last()); // если все норм - добавляем в карту инфу о модуле
}
}
// тут просто выведем что у нас получилось
qDebug()<<"so we have modules:";
foreach (QString key, modules.keys()) {
qDebug()<<"module: "<< key<<"version: "<< modules.value(key);
}
自己处理输出。我一开始就问