这是对我之前问题的改进:c# generate random string based on pattern
我有如下代码:
class Generator
{
private static readonly Random R = new Random();
private static readonly char[] L = { 'a', 'b', 'c', 'd', 'e' };
private static readonly char[] U = { 'A', 'B', 'C', 'D', 'E' };
private static readonly char[] S = { '!', '@', '#', '$', '%' };
public static string FromPattern(string pattern)
{
return Regex.Replace(pattern, @"\[([Ccds])(?::([\d]+))?\]", ReplaceSingleMatch);
}
private static string ReplaceSingleMatch(Match m)
{
int length;
if (!int.TryParse(m.Groups[2].Value, out length))
length = 1;
var output = new StringBuilder();
while (output.Length != length)
{
switch (m.Groups[1].Value)
{
case "d"://digits
output.Append(R.Next(0, 9));
break;
case "c"://lowercase char
output.Append(L[R.Next(L.Length)]);
break;
case "C"://uppercase char
output.Append(U[R.Next(U.Length)]);
break;
case "s"://special char
output.Append(S[R.Next(S.Length)]);
break;
}
}
return output.ToString();
}
}
使用上面我可以写:
Generator.FromPattern("ID: [d:3][c:2]#[C][s:2]")
我将得到如下示例输出:ID: 263ac#D$!
因此,当我输入 [d]
时,我得到一位数字,如果我输入 [d:5]
,我得到 5 位数字。
我想添加的是范围,所以当我输入 [d:2-5]
时,我会随机获得 2 到 5 个随机数字。
我最大的问题是正则表达式,休息很容易:)
我需要我的正则表达式来搜索以下组:
[d]
,[d:3]
(冒号后必须是数字),[d:2-5]
(两个数字用破折号分隔)
欢迎提出任何改进建议!
最佳答案
非常棒的正则表达式工具:http://www.ultrapico.com/Expresso.htm
这是我想出的表达式(带有命名的捕获组):
\[(?<type>[Ccds])(:(?<a>[\d]+)(-(?<b>[\d]+))?)?\]
关于c# - 正则表达式 - 改进搜索并添加第三组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15291297/