Regex以匹配用两种类型的分隔符分隔的字符串

本文关键字:分隔符 分隔 字符串 类型 两种 Regex | 更新日期: 2023-09-27 17:59:26

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

我有一个分隔字符串1,3;5,1;6,4等等。基本上,我在这里存储的是一个购物车,其中包含ID13意味着我有一个id为"1"、数量为3的乘积。产品(带卷)用";"分隔。

我需要做的是组合一个正则表达式来验证这样的字符串。只有正数才被允许,有限制,比如说从1到10000。

有人能解决这个问题吗?

Regex以匹配用两种类型的分隔符分隔的字符串

我认为您最好不要使用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