-1

正規表現がどのように組み合わされているのかよくわからないので、ここに質問があります。

区切り文字列1,3;5,1;6,4などがあります。基本的に、私がここに持っているのは、製品IDボリュームを含むショッピングカートを保管することです。13id"1"と数量の商品があることを意味し3ます。製品(ボリューム付き)はで区切られ";"ます。

私がする必要があるのは、そのような文字列を検証する正規表現をまとめることです。正の数のみが許可されますが、たとえば1から10000までの制限があります。

誰かがそれに対する解決策を持っていますか?

4

3 に答える 3

3

これには正規表現を使用しない方がよいと思います。あなたのフォーマットが次のようなものであると仮定すると1,3;5,1;6,4(つまり、他の@Richが指摘しているように質問で指定したものではない)、それを分割し;から,

var input = "1,3;5,1;6,4";

var pairs = input.Split(';')                        // ["1,3","5,1","6,4"]
    .Select(x => x.Split(','))                      // [["1","3"],["5","1"],["6","4"]]
    .Select(x => new { Id = x[0], Volume = x[1] }); // [{ Id : "1", Volume : "3"} ...]

foreach(var pair in pairs)
{
    Console.WriteLine("Id: " + pair.Id + " Volume: " + pair.Volume);
}
// Id: 1 Volume: 3
// Id: 5 Volume: 1
// Id: 6 Volume: 4

注:System.Linqここでは匿名タイプを使用しましたが、必要に応じて匿名タイプを使用することもできます。

注:IndexOutOfRangeException入力が期待される形式でない場合、これは失敗します(つまり、をスローします)。危険な入力を検証したい場合、おそらく正規表現が必要です。他の@Richの答えは私には良さそうです。

于 2013-02-13T21:09:45.907 に答える
2

この正規表現パターンは、セミコロンで区切られた数値のペアに一致します。ここで、コンマは各ペアのメンバーを区切り、各数値は1〜10000です。

^([1-9]\d{0,3}|10000),([1-9]\d{0,3}|10000)(;([1-9]\d{0,3}|10000),([1-9]\d{0,3}|10000))*$

少なくとも1つのペアが必要です。ペアが1つしかない場合は、それに続くセミコロンはありません。セミコロンは、隣接するペアの間にのみ存在する必要があります。

于 2013-02-13T21:18:27.390 に答える
1

あなたのフォーマットがどのように機能するかを理解しているかどうかはわかりませんが、すべてがIDとボリュームを持っている必要がある場合は、フォーマット[id]、[volume]; [id]、[volume]; 次に、次のような正規表現を使用します。

(([0-9]),([0-9]);)+

ただし、の例は1,3;5,1;6;4その形式に準拠していないようです。したがって、ボリュームをオプションにする場合は、次のようにします。

(([0-9])(,[0-9])?;)+

動作するはずです。正規表現パターンを試してみたい場合は、http://regexpal.comなどのオンラインユーティリティを使用することをお勧めします。

于 2013-02-13T20:57:08.803 に答える