-1

我不太明白正则表达式是如何组合在一起的,所以这是我的问题。

我有一个分隔字符串1,3;5,1;6,4,依此类推。基本上,我在这里所拥有的是存储带有产品ID数量的购物车。13这意味着我有一个带有 id"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这里使用了 and 一个匿名类型,但如果你愿意,你可以不用。

IndexOutOfRangeException另请注意:如果您的输入不是预期的格式,这将失败(即抛出一个)。如果您想验证一些不可靠的输入,那么 Regex可能就是您想要的 - 其他 @Rich 的答案对我来说看起来不错。

于 2013-02-13T21:09:45.907 回答
2

This regex pattern matches on semicolon-delimited number pairs, where a comma separates the members of each pair, and each number is between 1 and 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))*$

There must be at least one pair. If there is only one pair, no semicolon follows it. Semicolons should be present only between neighboring pairs.

于 2013-02-13T21:18:27.390 回答
1

我不确定我是否了解您的格式如何工作,但如果所有内容都必须具有格式 [id],[volume];[id],[volume]; 的 ID 和卷。然后我会说使用正则表达式,例如:

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

但是您的示例1,3;5,1;6;4似乎不遵循该格式,因此如果您希望音量是可选的,那么:

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

应该管用。如果您想尝试正则表达式模式,那么我建议您使用在线实用程序,例如http://regexpal.com

于 2013-02-13T20:57:08.803 回答