如何将包含括号的字符串列表展平为单个列表?

时间:2018-09-23 12:40:36

标签: c++ qt

如何将此字符串列表解析为仅包含扩展名的单个列表,如以下示例所示?我正在使用Qt / C ++

要解析的列表:

QStringList = [
     "Image files (*.png *.xpm *.jpg)",
     "Text files (*.txt)",
     "Any files (*)"
];

想要的结果:

QStringList = ["*.png", "*.xpm", "*.jpg", "*.txt", "*"]

2 个答案:

答案 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(" "));

其中fileTypesextensions分别是输入和输出字符串列表。

示例

这是我为您编写的一个有效示例,可以测试建议的解决方案:

#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", "*")