正则表达式匹配字符串分隔与两种类型的分隔符

时间:2013-02-13 20:34:42

标签: c# asp.net regex

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

我有一个分隔字符串1,3;5,1;6,4,依此类推。基本上我所拥有的是存储产品 ID 的购物车。 13表示我的商品ID为"1",数量为3。产品(包含卷)以";"分隔。

我需要做的是组合一个将验证此类字符串的正则表达式。只有正数才允许有限制,例如从1到10000。

有人有解决方法吗?

3 个答案:

答案 0 :(得分: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的回答对我来说很好。

答案 1 :(得分: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))*$

必须至少有一对。如果只有一对,则不会使用分号。分号应仅存在于相邻对之间。

答案 2 :(得分:1)

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

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

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

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

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