0

私は正規表現を学ぼうとしています。私は、数百の *.png ファイルから QPixmap を生成する任務を負っています。理想的には、PixMap マトリックスになります。

QRegEx がこのアクションを実行するための最良の方法だと思うので、並べ替えることなくピックスマップをマトリックスに挿入できます。

私が一致させようとしている私のパターン:

runner_(int)_(int).png

最初の整数の境界は [-1, 13] で、2 番目の整数の境界は [00, 20] です。2 番目の整数の先頭にゼロがあります。

これは私のコードの試みです:

    // 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 の初心者です (約 1 時間前に学習を開始しました!)

ありがとう :)

4

1 に答える 1

1

{1,1}is絶対に役に立たない、つまり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 に答える