如何将此字符串列表解析为仅包含扩展名的单个列表,如以下示例所示?我正在使用Qt / C ++
要解析的列表:
QStringList = [
"Image files (*.png *.xpm *.jpg)",
"Text files (*.txt)",
"Any files (*)"
];
想要的结果:
QStringList = ["*.png", "*.xpm", "*.jpg", "*.txt", "*"]
答案 0 :(得分:1)
您可以尝试以下方法:
对于QStringList的每个元素,获取括号之间的内容并将其分割:
QStringList stringList = ["Image files (*.png *.xpm *.jpg)","Text files (*.txt)","Any files (*)"];
QStringList newStringList = [];
for (int i = 0; i < stringList.size(); i++){
//Get the parentheses
string element= stringlist.at(i);
unsigned first = element.find("(");
unsigned last = element.find(")");
first++;
string extensions = element.substr (first,last-first);
//Split it with the " " as delimiter.
size_t pos = 0;
string extension;
string delimiter = " ";
while ((pos = extensions.find(delimiter)) != std::string::npos) {
extension= s.substr(0, pos);
//Add here extension to your new qstringlist
newStringList.append(extension);
std::cout << extension<< std::endl;
extensions.erase(0, pos + delimiter.length());
}
}
输出:
*.png
*.xmp
*.jpg
*.txt
*
希望它对您有用!
答案 1 :(得分:0)
Qt方法是使用QString提供的功能,以便删除括号外的文本(包括括号本身),将其余文本分成如下这样的空格分隔的段:>
foreach (const QString &str, fileTypes)
extensions.append(str.split("(").last().chopped(1).split(" "));
其中fileTypes
和extensions
分别是输入和输出字符串列表。
这是我为您编写的一个有效示例,可以测试建议的解决方案:
#include <QDebug>
int main(int /*argc*/, char /**argv[]*/)
{
QStringList fileTypes({
"Image files (*.png *.xpm *.jpg)",
"Text files (*.txt)",
"Any files (*)"
});
QStringList extensions;
foreach (const QString &str, fileTypes)
extensions.append(str.split("(").last().chopped(1).split(" "));
qDebug() << extensions;
return 0;
}
如所写,给定的示例将产生以下结果:
("*.png", "*.xpm", "*.jpg", "*.txt", "*")