質問
バージョン番号の部分(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;を追加しました。キャプチャグループおよびドットがない場合に備えて、ドットにも数量詞を使用します。
所属していません StackOverflow