簡體   English   中英

正則表達式組字符串替換C#

[英]Regex group string replace c#

目標字符串是"qwer on chat: qwer chat" 我想將qwer .. etc替換為已存在的編碼文本(md5)//。 但是我不想將"on chat:"替換為文本編碼,而對“聊天”一詞進行了編碼。 預期結果是"{md5}{md5}{md5}{md5} on chat: {md5}{md5}{md5}{md5} {md5}{md5}{md5}{md5}" 如何在C#中做到這一點? 謝謝。

    public static string GetUniqueKey(int maxSize)
    {
        char[] chars = new char[62];
        chars =
        "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890".ToCharArray();
        byte[] data = new byte[1];
        RNGCryptoServiceProvider crypto = new RNGCryptoServiceProvider();
        crypto.GetNonZeroBytes(data);
        data = new byte[maxSize];
        crypto.GetNonZeroBytes(data);
        StringBuilder result = new StringBuilder(maxSize);
        foreach (byte b in data)
        {
            result.Append(chars[b % (chars.Length)]);
        }
        string l = result.ToString();
        return "{"+l+"}";
    }

    static IDictionary<string, string> map = new Dictionary<string, string>()
        {
        {"q",GetUniqueKey(5)},
        {"w",GetUniqueKey(5)},
        {"e",GetUniqueKey(5)},
        {"r",GetUniqueKey(5)},
        {"a",GetUniqueKey(5)},
        {"c",GetUniqueKey(5)},
        {"h",GetUniqueKey(5)},
        {"t",GetUniqueKey(5)},
        {"o",GetUniqueKey(5)},
        {"n",GetUniqueKey(5)},
        };

    public void ccc(string str)
    {
    var regex = new Regex(String.Join("|", map.Keys.Select(k => Regex.Escape(k))));
    string newStr = regex.Replace(str ,m => map[m.Value]);
    richTextBox1.AppendText(Environment.NewLine + newStr);
    }

無需正則表達式,只需使用String.SplitString.Join

    string s = "qwer on chat: qwer chat";
    var parts = s.Split(new string[] {"on chat:"}, StringSplitOptions.RemoveEmptyEntries);
    for (int i = 0; i < parts.length; i++) {
        // MD5 encode each part here replacing the value in the array
    }
    var final = string.Join("on chat:", parts);

如果您絕對必須使用正則表達式,則可以執行以下操作:

    var r = new Regex(@"^(.*)(on chat:)(.*)$");
    var n = r.Replace(s, m=> md5(m.Groups[1].Value) + m.Groups[2].Value + md5(m.Groups[3].Value));

其中md5是接受字符串並返回md5編碼字符串的函數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM