-1

メジャー、マイナー、リビジョン、およびビルド番号を一致させようとしています。

私の問題は:

与えられた2つのバージョン

string Version1 = "01.01.02.44";
string Version2 = "01.01.02.FF1";
string pattern =@"\d+.\d+.\d+.\d+";
var regEx = new Regex(pattern, RegexOptions.IgnoreCase);
var versionMatch = regEx.Match(Version2);
            if (match.Success)
            {
                 // DO ...
            }

次の正規表現パターンを使用します。

string pattern =@"\d+.\d+.\d+.\d+";

バージョン1に合わせることができます...

しかし、どうすればバージョン2と一致させることができますか?

4

5 に答える 5

4

数字だけでなく、バ​​ージョン番号で有効な文字を確認する必要があります。たとえば、次の正規表現は両方に一致します。

string pattern =@"\d+\.\d+\.\d+\.[0-9F]+";

これは、最初の3つの部分がすべて純粋に数値であるのに対し、最後の部分は任意の数字または文字Fであるという前提で一致します。正確な要件(不明)に一致するように、必要に応じて文字クラスを変更するだけです。

于 2012-11-09T13:11:44.150 に答える
3

最も簡単なアプローチは、で分割すること.です。

string[] parts = versionNumber.Split('.');
if (parts.Length != 4)
{
    // Invalid revision number.
}
else
{
    string major = parts[0];
    string minor = parts[1];
    string revision = parts[2];
    string buildNumber = parts[3];
    // etc...
}
于 2012-11-09T13:11:00.573 に答える
3

なぜ文字列操作を使用してバージョン番号を処理するのですか?

System.Versionクラスを使用することをお勧めします。

そのクラスは、バージョンのすべての部分(Build、 M ​​ajorMajorRevisionMinorMinorRevisionRevision)をすでに管理しています。

一致するだけでなく、バ​​ージョン番号が別のバージョン番号よりも古いか新しいかを確認するために、バージョン番号を簡単に比較できます。

Version v1 = new Version(2, 0);
Version v2 = new Version("2.1");

Console.Write("Version {0} is ", v1);

switch(v1.CompareTo(v2))
{
   case 0:
      Console.Write("the same as");
      break;
   case 1:
      Console.Write("later than");
      break;
   case -1:
      Console.Write("earlier than");
      break;
}

Console.WriteLine(" Version {0}.", v2);  

詳細と例については、System.Versionに関するこのMSDNの記事を参照してください。

このクラスを使用すると、文字列操作を使用してバージョン番号のさまざまな部分を自分で処理するオーバーヘッドを節約できます。

于 2012-11-09T13:17:02.490 に答える
0

これは、0〜9の整数のみを検索し、文字は検索しないためです。

スティングを複数のグループに分割できます。。*を使用しますか?代わりに[0-9]のみの​​すべての文字を取得します

 @"(?s)\.(?<string>.*?)\.(?<string>.*?)\.(?<string>.*?)\.(?<string>.*?)"
于 2012-11-09T13:09:38.443 に答える
0

言及した両方の文字列をキャプチャするには、次を変更できます。

string pattern =@"\d+.\d+.\d+.\d+";

に:

string pattern =@"\d\d[.]\d\d[.]\d\d[.]...|\d\d[.]\d\d[.]\d\d[.]..";

ただし、正規表現がどのように機能するかについて少し学び、いくつかのシナリオをテストしてみるとよいでしょう。次に、正確なニーズに合わせてパターンを微調整できます。

ドット(。)をyuorパターンでキャプチャする場合は、予約文字として使用されるため、角かっこで囲む必要があります。プラス(+)は前の文字の任意の数を意味するため、\ d +は任意の桁数(01と0123および567789など)に一致します。

正規表現のチートシートを参照してください。

正規表現をテストしたい場合は、オンラインで行うことができます。

于 2012-11-09T13:23:18.877 に答える