我想为用户提供一个花哨的许可证密钥文本框,它会插入破折号。 密钥应该是20个字符长(4组,每组5个字符)
我尝试使用正则表达式,首先:
Regex.Replace( text, ".{5}", "$0-" );
即使没有后续字符,插入短划线也是一个问题,例如 AAAAA-导致无法删除破折号,因为它会自动重新插入。
然后我想到告诉正则表达式应该有一个跟随字符
Regex.Replace( text, "(.{5})(.)", "$1-$2" );
但是将密钥拆分为5-6-6组......
有什么想法吗?
答案 0 :(得分:6)
使用否定前瞻以避免在最后添加-
。它匹配来自第一个但不是最后5个数字的输入字符串的每个5位数。
.{5}(?!$)
替换字符串
$0-
string str = "12345678909876543212";
string result = Regex.Replace(str, @".{5}(?!$)", "$0-");
Console.WriteLine(result);
Console.ReadLine();
<强>输出:强>
12345-67890-98765-43212
答案 1 :(得分:0)
答案 2 :(得分:0)
如果您喜欢非正则表达方式,那么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");
注意:不考虑不完全分割的注册码。
在类似问题中查看上述方法和其他方法:
答案 3 :(得分:0)
<强>代码强>
string key = "12345678909876543212";
licenseBox.Text = System.Text.RegularExpressions.Regex.Replace(key, @".{5}(?!$)", "$0-");
“如上所述” - 应该可以正常工作。
以下内容也适合您。
<强>代码强>
string key = "12345678909876543212";
licenseBox.Text = String.Format("{0}-{1}-{2}-{3}", key.Substring(0, 5), key.Substring(5, 5), key.Substring(10, 5), key.Substring(15, 5));
<强>输出强>
12345-67890-98765-43212