我真的不明白正则表达式是如何组合在一起的,所以这是我的问题。
我有一个分隔字符串1,3;5,1;6,4
,依此类推。基本上我所拥有的是存储产品 ID 和卷的购物车。 1
,3
表示我的商品ID为"1"
,数量为3
。产品(包含卷)以";"
分隔。
我需要做的是组合一个将验证此类字符串的正则表达式。只有正数才允许有限制,例如从1到10000。
有人有解决方法吗?
答案 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