我正在尝试基于模式进行简单的字符串生成。
我的想法是使用正则表达式进行简单的替换。我从简单的方法开始:
private static string parseTemplate(string template)
{
return Regex.Replace(template, @"(\[d)((:)?([\d]+)?)\]", RandomDigit());
}
private static string RandomDigit()
{
Random r = new Random();
return r.Next(0, 9).ToString();
}
现在这样做是用应该是随机数字的组来替换[d]
,之类的组。
不幸的是,每个组都被相同的数字替换,例如,如果我把我的方法将返回。
我想在每个地方得到不同的数字,比如.[d:3]
test [d][d][d:3]
test 222
test 361
我遇到的第二个问题是处理长度的方法:
现在我必须[d]
为我想要的每个数字指定,但指定[d:3]
并获得相同的输出会更容易。
我知道有一个名为Fare的项目,但我想在没有这个库的情况下这样做
现在我只搜索[d]
,但是这种方法可以正常工作吗?添加其他组不会有问题,例如:[s]
对于特殊字符或任何其他类型的模式。
编辑1
正如建议的那样,我将 Random 更改为静态变量,如下所示:
private static string parseTemplate(string template)
{
return Regex.Replace(template, @"(\[d)((:)?([\d]+)?)\]", RandomDigit());
}
private static Random r = new Random();
private static string RandomDigit()
{
return r.Next(0, 9).ToString();
}
问题是当我这样调用我的代码时:
Console.WriteLine(parseTemplate("test [d:2][d:][d]"));
Console.WriteLine(parseTemplate("test [d:2][d:][d]"));
我得到这样的输出
test 222
test 555
我想要这样的输出(例如):
test 265
test 962
我认为这个问题是Regex.Replace
我只调用RandomDigit
一次。