gpt4 book ai didi

c# 根据模式生成随机字符串

转载 作者:行者123 更新时间:2023-12-02 05:17:39 28 4
gpt4 key购买 nike

我正在尝试根据模式生成简单的字符串。
我的想法是使用 Regex 进行简单的替换。我从简单的方法开始:

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

最佳答案

对于您的第一个问题:当您调用 new Random() 时,您每次调用该函数时都会使用相同的值进行播种 - 初始化一个静态 Random 成员变量一次然后返回 r.Next(0,9).ToString();

编辑:

在回答您的评论时,尝试将 MatchEvaluator 与委托(delegate)一起使用,如下所示(未经测试):

static string RandomReplacer(Match m)
{
var result = new StringBuilder();
foreach (char c in m.ToString())
result.Append(c == 'd' ? RandomDigit() : c);
return result.ToString()
}

private static string parseTemplate(string template)
{
return Regex.Replace(template, @"(\[d)((:)?([\d]+)?)\]", new MatchEvaluator(RandomReplacer));
}

然后您可以扩展此方法以匹配 [d:3] 并相应地在您的 MatchEvaluator 中解析它,从而解决您的第二个问题。

关于c# 根据模式生成随机字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14396482/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com