我想为用户提供一个花哨的许可证密钥文本框,可以插入破折号。这个键应该有20个字符长(4组5个字符)
我试过使用regex,首先:
Regex.Replace( text, ".{5}", "$0-" );这是一个问题,因为破折号是插入,即使没有下列字符,例如AAAAA-,结果是无法删除破折号,因为它是自动重新插入。
然后我想告诉regex里面应该有一个字符
Regex.Replace( text, "(.{5})(.)", "$1-$2" );但这把钥匙分成5-6-6组.
有什么想法吗?
发布于 2014-08-27 16:07:59
使用负前瞻以避免最后添加-。它匹配第一个输入字符串的每个5位数,但不匹配最后5位数字。
.{5}(?!$)替换串
$0-演示
string str = "12345678909876543212";
string result = Regex.Replace(str, @".{5}(?!$)", "$0-");
Console.WriteLine(result);
Console.ReadLine();输出:
12345-67890-98765-43212依佩恩
发布于 2014-08-27 16:08:25
.{5}[^$]使用this.This不会将a-放在末尾。
代之以
$0-见演示。
http://regex101.com/r/vY0rD6/3
发布于 2014-08-27 16:20:34
如果你喜欢一种非正则方法的话,你可能会喜欢linq风格的方法.
这可以在LinqPad中运行:
var sourceReg = "abcdeFGHIJ12345klmno";
var splitLength=5;
var regList = Enumerable.Range(0, sourceReg.Length/splitLength).Select(i => sourceReg.Substring(i*splitLength, splitLength));
regList.Dump("Registration List");
var regSeparated = string.Join("-", regList);
regSeparated.Dump("Registration with Separators");注意:没有考虑到没有正确划分的reg代码。
请参阅上面的方法,以及类似问题中的其他方法:
https://stackoverflow.com/questions/25531965
复制相似问题