質問

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

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

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

2.13

この場合、BuildおよびRevisionグループはnull値を返す必要があります。これについてすべて間違っている場合は、より良い方法を提案してください。

役に立ちましたか?

解決

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

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

他のヒント

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

VBScriptでテスト済み、このパターン:

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

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

  • 23
  • 23.1
  • 23.1.1
  • 23.1.1.1

そして、次のすべてが偽:

  • 23.11.11.33.11
  • 23.43 2.1
  • 44.11.2 3
  • 3q.4.2.1
  • 3.4。
  • 4.3.21a

正規表現を使用したくない場合は、次を試してください:

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

int major = fvi.FileMajorPart;
int minor = fvi.FileMinorPart;
int build = fvi.FileBuildPart;

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

(?<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);

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

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

単に<!> quot; 0またはone <!> quot;を追加しました。キャプチャグループおよびドットがない場合に備えて、ドットにも数量詞を使用します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top