【发布时间】:2017-09-20 02:22:21
【问题描述】:
我想将一个信用卡号(在我的情况下我总是有 16 位数字)分成 4 个 4 位数字的块。
我通过积极的展望成功地做到了:
var s="4581458245834584";
var t=Regex.Split(s,"(?=(?:....)*$)");
Console.WriteLine(t);
但我不明白为什么结果是两个填充的空单元格:
我已经知道我可以使用“删除空条目”标志,但我不是在那之后。
但是 - 如果我将正则表达式更改为 (?=(?:....)+$) ,那么我会得到这个结果:
问题
为什么正则表达式会发出空单元格?以及如何修复我的正则表达式,使其首先生成 4 个块(无需“修剪”那些空条目)
【问题讨论】:
-
卡号不是总是16位吗?假设同样多,不是正则表达式吗?你不能用 rx 或手动根据它进行 aplit 吗?
-
@ChrisWatts 可能有 10 种方法。我想用正则表达式来做。我已经有了拆分解决方案(一条线),所以我已经完成了 95% 的工作。我只需要这 5% 来修复代码。(并理解为什么会发出那些额外的空单元格)。
-
很公平,只是我的中间想法!
-
请注意,不同品牌的支付卡使用不同长度的卡号。并非全部都是十六位数。此外,支付卡号的前六位数字构成了识别发卡银行的 IIN(或“BIN”号),因此将这部分分开可能很有用。对于这样一个简单的任务,正则表达式非常昂贵;改为使用简单的子字符串来拆分每个感兴趣的部分。
-
@Bobulous 它在页面加载时发生一次。它没有运行成千上万次。不应该考虑这种纳米优化(在这个特定任务中)。