8

バージョン番号(Major.Minor.Build.Revision)の一部をC#正規表現と一致させようとしています。ただし、私は正規表現を作成するのはかなり新しいので、Expressoを使用することさえ少し難しいことがわかっています。今、私はこれを持っています:

(?<Major>\d*)\.(?<Minor>\d*)\.(?<Build>\d*)\.(?<Revision>\d*)

これは機能しますが、バージョン番号のすべての部分が存在する必要があります。私がやりたいのは、次のようなバージョンにも一致することです。

2.13

この場合、ビルドグループとリビジョングループはnull値を返す必要があります。私がこれについてすべて間違っている場合は、より良い方法を提案してください。

4

6 に答える 6

13
(?<Major>\d*)\.(?<Minor>\d*)(\.(?<Build>\d*)(\.(?<Revision>\d*))?)?

3 番目と 4 番目の部分をオプションにします。

于 2008-12-30T15:20:55.430 に答える
3

これが正規表現ではないことはわかっていますが、 System.Versionがすべての作業を行います。

于 2012-07-14T17:49:36.013 に答える
2

VBScript でテストされた、このパターン:

^(\d+)(\.\d+)?(\.\d+)?(\.\d+)?$

次のすべての True を検証します。

  • 23
  • 23.1
  • 23.1.1
  • 23.1.1.1

そして、以下はすべて False です。

  • 23.11.11.33.11
  • 23.43 2.1
  • 44.11.2 3
  • 3q.4.2.1
  • 3.4。
  • 4.3.21a
于 2010-11-08T11:54:56.157 に答える
1

正規表現を使用したくない場合は、次を試すことができます。

System.Diagnostics.FileVersionInfo fvi = System.Diagnostics.FileVersionInfo.GetVersionInfo(<string filePath>);

int major = fvi.FileMajorPart;
int minor = fvi.FileMinorPart;
int build = fvi.FileBuildPart;
于 2008-12-30T15:54:46.283 に答える
0

上記の回答が正しく機能しない

(?<Major>\d*)\.(?<Minor>\d*)(\.(?<Build>\d*)(\.(?<Revision>\d*))?)?

これを試して、

  var regularExpression = @"^(\d+\.)?(\d+\.)?(\d+\.)?(\*|\d+)$";
                var regex = Regex.IsMatch("1.0.0.0", regularExpression, RegexOptions.IgnoreCase | RegexOptions.CultureInvariant);
                Console.WriteLine(regex);
于 2012-04-30T10:11:58.747 に答える
-1

次のようなことを試してください:

(?<Major>\d*)\.?(?<Minor>\d*)?\.?(?<Build>\d*)?\.?(?<Revision>\d*)?

キャプチャ グループと、ドットがない場合に備えて、「0 または 1」の量指定子をいくつか追加しただけです。

于 2008-12-30T15:25:08.293 に答える