0

我正在尝试学习 RegEx。我的任务是从数百个 *.png 文件中生成 QPixmap。理想情况下,它将是一个 PixMap 矩阵。

我认为 QRegEx 是执行此操作的最佳方式,因此我可以将像素图插入矩阵而无需排序。

我试图匹配的模式:

runner_(int)_(int).png

其中第一个整数的边界为 [-1, 13],第二个整数的边界为 [00, 20]。第二个整数有一个前导零。

这是我的代码尝试:

    // find the png files in the thing
    QDir fileDir(iconPath);        
    QFileInfoList fileList = fileDir.entryInfoList();

    QRegExp rxlen("runner_([^\\_]{1,1}])_([^\\_]{1,1}]).png");        
    foreach (const QFileInfo &info, fileList) {
        qDebug() << info.fileName();
        int pos = rxlen.indexIn(info.fileName());
        if (pos > 1) {
            qDebug() << rxlen.cap(1);
            qDebug() << rxlen.cap(2);
        } else {
            qDebug() << "Didn't find any";
        }
    }

我的问题:请帮助使用 RegEx 表达式。

请温柔,我是 RegEx 的新手(大约一个小时前开始学习它!)

谢谢 :)

4

1 回答 1

1

{1,1}绝对没用,表示使用了 1 到 1 次的东西,即一次。您可以只在字符串中写入元素。

既然你已经把你的模式写得很好,你可以直接从它构建正则表达式:

runner_(-1|[0-9]|0+[0-9]|0*1[0123])_([0-9]|0+[0-9]|0*1[0-9]|20)\.png

基本上只是为您范围内的所有数字编写模式。

编辑以逃避点。再次编辑以允许前导零。

于 2013-01-17T15:05:26.453 回答