2

_my_endingファイル名に末尾を追加し、ファイル拡張子を変更しないコードを書き込もうとしています。

私が取得する必要があるものの例:

"test.bmp"            -> "test_my_ending.bmp"
"test.foo.bar.bmp"    -> "test.foo.bar_my_ending.bmp"
"test"                -> "test_my_ending"

私はである程度の経験がPCREあり、それを使用するのは簡単な作業です。Qtの経験が不足しているため、最初に次のコードを作成しました。

QString new_string = old_string.replace(
      QRegExp("^(.+?)(\\.[^.]+)?$"),
      "\\1_my_ending\\2"
      );

このコードは機能しません(まったく一致しません)、そして私はドキュメントで次のことを見つけました

欲張りでないマッチングは、個々の数量詞に適用することはできませんが、パターン内のすべての数量詞に適用できます。

+ご覧のとおり、私の正規表現では、最初の数量詞の後に追加することで、最初の数量詞の貪欲さを減らそうとしまし?た。これはではサポートされていませんQRegExp

これは私にとって本当に残念なことです。そのため、次の醜いが機能するコードを作成する必要があります。

//-- write regexp that matches only filenames with extension
QRegExp r = QRegExp("^(.+)(\\.[^.]+)$");
r.setMinimal(true);

QString new_string;

if (old_string.contains(r)){
   //-- filename contains extension, so, insert ending just before it
   new_string = old_string.replace(r, "\\1_my_ending\\2");
} else {
   //-- filename does not contain extension, so, just append ending
   new_string = old_string + time_add;
}

しかし、もっと良い解決策はありますか?私はQtが好きですが、Qtに見られるいくつかのことは落胆しているようです。

4

1 に答える 1

1

QFileInfo を使用するのはどうですか? これはあなたの「醜い」コードよりも短いです:

QFileInfo fi(old_string);
QString new_string = fi.completeBaseName() + "_my_ending" 
    + (fi.suffix().isEmpty() ? "" : ".") + fi.suffix();
于 2012-12-07T17:26:55.267 に答える