-2

OpenFileDialogファイルフィルター文字列の拡張子のリストで最初の拡張子を見つけたいです。

以下の例を考えてみましょう -

Image Files(*.BMP;*.JPG;*.GIF)|*.BMP;*.JPG;*.GIF

Text files (*.txt)|*.txt

最初のケース-ユーザーが拡張子なしでファイルを保存しようとすると、デフォルトで.BMP拡張子をファイル名に追加します。

.txt2番目のケース-ユーザーが拡張子なしでファイルを保存しようとすると、デフォルトでファイル名に拡張子を追加したいと思います。

4

3 に答える 3

1

正規表現を使用して文字列を分割するのではなく、SysDragon が提案するように Split 関数を使用するだけです。これを行わない理由はありません。元の文字列の 2 番目の部分を取得すると、この正規表現は唯一の一致として取得BMPします。*.BMP;*.JPG;*.GIF

^\|\*\.(\w{1,4});

簡単に言えば、これは次のことを言います。

  • ^ 文字列の先頭から開始
  • \| パイプ文字を見つけます (これは正規表現の OR に相当するため、\ で区切ります)
  • \*単一の * 文字を検索します (* は正規表現で「0 回以上の繰り返し」を意味するため、ここでも区切られています)
  • \. 単一のピリオドを検索します (これは通常「任意の文字」を意味するため、区切られています)
  • (\w{1,4}) 1 文字以上 4 文字以下の英数字を検索します。これはキャプチャ グループであるため、一致オブジェクトから取得できます。
  • ; セミコロンを見つける

私は任意に 1 ~ 4 文字の英数字を選択しましたが、ニーズに合わせてこれを調整でき{3}ます[A-Za-z]{1,3}

最初の拡張のみが必要だったので、これで目的は達成できますが、常にパターンを修正して、すべての拡張を一致コレクションとして提供することができます。実際、その正規表現はさらに単純です (しかし、 1 で十分なのにnの一致を返すのはなぜでしょうか?) そして、学習演習としてそれを活用します :-)

于 2013-04-05T15:33:05.317 に答える
0

このタスクを達成するために、2 つの異なる正規表現を使用しました。私が使用した最初の正規表現は

(?<Name>[^|]*)\|(?<Extension>[^|]*)\|?

名前とファイルの表現を壊す

Image Files(*.BMP;*.JPG;*.GIF)|*.BMP;*.JPG;*.GIF

2つの部分に

  • Image Files(*.BMP;*.JPG;*.GIF)
  • *.BMP;*.JPG;*.GIF

次に、正規表現を使用しました

\*\.(?<Name>[^;]\w*)

最初の正規表現グループの一部で、、Entensionのようなグループをさらに取得し、最初のグループ一致を取得します。Expressoの使用を奨励してくれた Steve Pettifer に心から感謝ます。BMPJPGGIF

于 2013-04-05T11:36:38.940 に答える