Regex以匹配用两种类型的分隔符分隔的字符串
本文关键字:分隔符 分隔 字符串 类型 两种 Regex | 更新日期: 2023-09-27 17:59:26
我真的不明白regex表达式是如何组合在一起的,所以这是我的问题。
我有一个分隔字符串1,3;5,1;6,4
等等。基本上,我在这里存储的是一个购物车,其中包含ID和卷。1
、3
意味着我有一个id为"1"
、数量为3
的乘积。产品(带卷)用";"
分隔。
我需要做的是组合一个正则表达式来验证这样的字符串。只有正数才被允许,有限制,比如说从1到10000。
有人能解决这个问题吗?
我认为您最好不要使用Regex。假设你的格式像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
)。如果你想验证一些不可靠的输入,那么Regex可能就是你想要的-其他@Rich的答案对我来说很好。
此正则表达式模式在分号分隔的数字对上匹配,其中逗号分隔每对的成员,并且每个数字在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))*$
必须至少有一对。如果只有一对,后面就没有分号。分号应该只出现在相邻的对之间。
我真的不确定我是否理解你的格式是如何工作的,但如果所有东西都必须有一个ID和volume int格式[ID],[volume];[id],[volume];然后我会说使用一个类似于的正则表达式
(([0-9]),([0-9]);)+
但是您的1,3;5,1;6;4
示例似乎没有遵循该格式,所以如果您希望音量是可选的,那么:
(([0-9])(,[0-9])?;)+
应该起作用。如果您想尝试regex模式,那么我建议使用诸如http://regexpal.com