1

私は次の文字列を持っています:

01-21-27-0000-00-048また、各セクションが。で区切られているため、簡単に分割でき-ますが、この文字列は、で表される場合があり01-21-27-0000-00048ます。最後の2つの部分が結合されているため、分割は簡単ではありません。どうすればこれを処理できますか?また、次のような場合はどうでしょうか。01-21-27-0000-00.048

誰かが興味を持っている場合、これは小包番号であり、郡ごとに異なり、郡は1つの形式を持つことも、100の形式を持つこともできます。

4

3 に答える 3

4

これは、正規表現を使用する場合に非常に適しています。文字列は次の正規表現と一致します。

(\d{2})-(\d{2})-(\d{2})-(\d{4})-(\d{2})[.-]?(\d{3})

入力をこの式と照合し、照合から6つの数字のグループを収集します。

var str = new[] {
    "01-21-27-0000-00048", "01-21-27-0000-00.048", "01-21-27-0000-00-048"
};
foreach (var s in str) {
    var m = Regex.Match(s, @"(\d{2})-(\d{2})-(\d{2})-(\d{4})-(\d{2})[.-]?(\d{3})");
    for (var i = 1 /* one, not zero */ ; i != m.Groups.Count ; i++) {
        Console.Write("{0} ", m.Groups[i]);
    }
    Console.WriteLine();
}

ダッシュで区切られたセグメント内の文字など、他の文字を許可する場合は、文字、数字、またはアンダースコアを示す\w代わりに使用できます。\d既知の範囲内、たとえば2〜4の範囲内で不特定の数のそのような文字を許可する場合は、「正確に2つ」を意味する{2,4}より具体的なの代わりに正規表現で使用できます。{2}例えば、

(\w{2,3})-(\w{2})-(\w{2})-(\d{4})-(\d{2})[.-]?(\d{3})

最初のセグメントに2〜3桁の数字または文字を含め、セグメント2および3の文字も許可します。

于 2012-10-15T14:38:33.593 に答える
2

最初に文字列を正規化します。

つまり、最後の部分が常に3文字であることがわかっている場合は、最後から4番目の文字として-を挿入し、結果の文字列を分割します。同じ線に沿って、ドット「。」を変換します。ダッシュ'-'に移動し、その文字列を分割します。

于 2012-10-15T14:35:22.733 に答える
0

数字ではないすべての文字をemptyString('')に置き換えます。

次に、文字列のいずれかが次のような形式になります

012127000000048

これで、分割を(2、2、2、4、2、3)の部分に使用できます。

于 2012-10-15T14:35:02.543 に答える