C# 使用正则表达式生成随机字符串

C# 使用正则表达式生成随机字符串,c#,regex,C#,Regex,我已经有了一个生成随机字符串的方法。但是速度很慢。我想用我不擅长的正则表达式来改进这个方法 我的代码: public string GetRandomString() { var random = new Random(); string id = new string(Enumerable.Repeat("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789", 16) .Selec

我已经有了一个生成随机字符串的方法。但是速度很慢。我想用我不擅长的正则表达式来改进这个方法

我的代码:

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;
}
通过使用regex,我可以将字符串:
abcdefghijklmnopqrstuvxyzabcdefghijklmnopqrstuvxyzo123456789
轻松压缩为一些字符。就像:

var regex=newregex(@“[\w\d]{16}”)


有没有办法用正则表达式创建随机字符串?

您可以尝试使用以下库从模式生成随机字符串:

其次,为什么要使用Enumerate.Repeat生成字符串?为什么不将它保存在字符串中或缓存?重复16次有什么意义?我认为每次方法调用都会生成这个字符串,这就是为什么它很慢的原因。在我看来,字符串实习在代码中不起作用,因为代码生成了字符串。 这样做怎么样:

string dictionaryString = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
StringBuilder resultStringBuilder = new StringBuilder();
for (int i=0;i<desiredLength;i++)
{
    resultStringBuilder.Append(dictionaryString[random.Next(dictionary.Length)]);
}
return resultStringBuilder.ToString();
string dictionaryString=“abcdefghijklmnopqrstuvxyzabcdefghijklmnopqrstuvxyzo123456789”;
StringBuilder结果StringBuilder=新建StringBuilder();

对于(int i=0;i我以前尝试过这个方法,但性能并没有那么好。Regex是一种方法。我完全支持Regex,但从这个意义上说,使用它过于工程化

创建一个包含所有要使用的字符的数组,然后在其中随机循环,每次捕获一个元素(或一组元素置换),这样就可以开始了

这是一个你可以复制或阅读的示例程序。我很想知道@Access Denied的答案和这个小家伙之间的性能差异。请原谅我缺乏优雅,但我想澄清一下,以防其他人偶然发现这一点

using System;
using System.Text;

namespace RandomString
{
    class Program
    {

        static void Main()
        {
            Console.WriteLine("My new random alphanumeric string is {0}", GetRandomAlphaNumString(12));
            Console.WriteLine("\nPress any key to exit...");
            Console.ReadKey(true);
        }

        static char[] charactersAvailable = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',
                                             'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
                                             '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'};

        public static string GetRandomAlphaNumString(uint stringLength)
        {
            StringBuilder randomString = new StringBuilder();

            Random randomCharacter = new Random();

            for (uint i = 0; i < stringLength; i++)
            {
                int randomCharSelected = randomCharacter.Next(0, (charactersAvailable.Length - 1));

                randomString.Append(charactersAvailable[randomCharSelected]);
            }

            return randomString.ToString();
        }
    }
}
使用系统;
使用系统文本;
命名空间随机字符串
{
班级计划
{
静态void Main()
{
WriteLine(“我的新随机字母数字字符串是{0}”,GetRandomAlphaNumString(12));
Console.WriteLine(“\n按任意键退出…”);
Console.ReadKey(true);
}
静态字符[]charactersAvailable={'A',B',C',D',E',F',G',H',I',J',K',L',M',N',O',P',Q',R',S',T',U',V',W',X',Y',Z',
‘a’、‘b’、‘c’、‘d’、‘e’、‘f’、‘g’、‘h’、‘i’、‘j’、‘k’、‘l’、‘m’、‘n’、‘o’、‘p’、‘q’、‘r’、‘s’、‘t’、‘u’、‘v’、‘w’、‘x’、‘y’、‘z’,
'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'};
公共静态字符串GetRandomAlphaNumString(uint stringLength)
{
StringBuilder randomString=新的StringBuilder();
Random randomCharacter=新的Random();
对于(uint i=0;i
谢谢!我认为这是一种在一行中完成所有事情的方法。但是我的速度太慢了。这就是我想把它转换成正则表达式的原因。我会根据你的建议再试一次。事实上,我做了一些非常类似的事情来制作一些假GUID。性能很糟糕(不使用Enumerate。重复逻辑)。我真的很惊讶。哦,请稍候。
desiredLength
?这是一个所需的随机字符串长度。我不知道您需要什么数字或随机数。我注意到,如果我尝试生成一个包含100个字符串的列表,随机性非常弱。我创建了一个限制为100个条目的哈希集。I g在for循环中生成值,超过100个限制,只有26个是唯一的。只是一个提示,以防在需要值列表/数组的情况下随机性很重要。谢谢!听起来像是在数组中创建元素的随机索引/位置。哇。我写了另一个类似于你的方法。它正在工作。你可以编辑数组y至
charactersAvailable=“abcdefghijklmnopqrstuvxyzabcdefghijklmnopqrstuvxyz012456789”。ToCharray()
。速度更快。谢谢!是的。各种方法都可以优化此示例。此示例只使用常规的旧系统,没有其他有趣的东西,具有长的var/方法名称。优雅的代码非常棒,但我尝试让大多数答案对新手程序员可读。完成后让我知道哪个答案性能更好!我理解你的意思是^^!该方法的faStringBuilder不是最快的。不要这样做randomString+=。Concat的工作速度很慢。为此,请使用StringBuilder。您可以在内存中创建大量字符串。
using System;
using System.Text;

namespace RandomString
{
    class Program
    {

        static void Main()
        {
            Console.WriteLine("My new random alphanumeric string is {0}", GetRandomAlphaNumString(12));
            Console.WriteLine("\nPress any key to exit...");
            Console.ReadKey(true);
        }

        static char[] charactersAvailable = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',
                                             'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
                                             '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'};

        public static string GetRandomAlphaNumString(uint stringLength)
        {
            StringBuilder randomString = new StringBuilder();

            Random randomCharacter = new Random();

            for (uint i = 0; i < stringLength; i++)
            {
                int randomCharSelected = randomCharacter.Next(0, (charactersAvailable.Length - 1));

                randomString.Append(charactersAvailable[randomCharSelected]);
            }

            return randomString.ToString();
        }
    }
}