2014-09-09 2 views
0

Целевая строка "qwer on chat: qwer chat". Я хочу заменить qwer .. etc на кодированный текст (md5) //, который уже есть. Но я не хочу заменять "on chat:" на текстовое кодирование, в то время как слово «chat» должно быть закодировано. Ожидаемый результат: "{md5}{md5}{md5}{md5} on chat: {md5}{md5}{md5}{md5} {md5}{md5}{md5}{md5}". Как это сделать на C#? Благодарю.Regex group string заменить 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); 
    } 
+0

О, я уже видел этот вопрос раньше .. –

+0

Итак, вы хотите md5 все в строке, которая не является буквальной строкой 'on chat:'? Это верно? –

+0

Найдите минутку, чтобы прочитать [редактирование справки] (http://stackoverflow.com/editing-help) в справочном центре. Форматирование переполнения стека отличается от других сайтов. Чем лучше выглядит ваш пост, тем проще будет пользователям помочь вам. – gunr2171

ответ

0

Нет регулярное выражение необходимости, вы не можете просто использовать String.Split и String.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.