我已经有了一个生成随机字符串的方法。但是很慢。我想用我不擅长的正则表达式来改进这个方法。
我的代码:
public string GetRandomString()
{
var random = new Random();
string id = new string(Enumerable.Repeat("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789", 16)
.Select(s => s[random.Next(s.Length)]).ToArray());
return id;
}
通过使用正则表达式,我可以压缩字符串:abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
对一些字符很容易。就像:var regex = new Regex(@"[\w\d]{16}");
有没有办法用正则表达式创建一个随机字符串?
4条答案
按热度按时间vd2z7a6w1#
您可以尝试以下库从模式生成随机字符串:https://github.com/moodmosaic/Fare
其次,为什么要用Enumerate.Repeat生成字符串?你为什么不把它保存成字符串或者缓存呢?重复16次有什么意义?我认为你每次调用方法都会生成这个字符串,这就是为什么它很慢。在我看来,字符串实习在你的代码中不起作用,因为代码生成了字符串。不如这样做:
rhfm7lfc2#
我以前试过这个,性能不是很好。Regex是一种方法。我完全支持正则表达式,但在这种意义上使用它是过度工程化的。
用你想要使用的所有字符创建一个数组,然后随机循环,每次抓取一个元素(或一组元素位移),你应该可以开始了。
这里有一个示例程序,你可以复制或细读。我很想知道@Access Denied的答案和这个小家伙之间的性能差异。请原谅我不够优雅,但我想澄清一下,以防别人偶然发现这一点。
tez616oj3#
我发现基于Regex模式生成随机字符串的最简单方法是使用RandomDataGenerator.Net NuGet包。你可以在GitHub上找到它:https://github.com/StefH/RandomDataGenerator
在你的例子中,代码看起来像这样:
并使用它像:
u2nhd7ah4#
这总是生成一个随机字符串,虽然它只是一些小的修改上面提到的代码片段.