Regex group string replace c# -
the target string "qwer on chat: qwer chat". want replace qwer .. etc encoded text (md5) // have. don't want replace "on chat:" text encoding , while word "chat" encoded. expected result "{md5}{md5}{md5}{md5} on chat: {md5}{md5}{md5}{md5} {md5}{md5}{md5}{md5}". how can in c#? thanks.
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); }
no regex needed, can use string.split , string.join:
string s = "qwer on chat: qwer chat"; var parts = s.split(new string[] {"on chat:"}, stringsplitoptions.removeemptyentries); (int = 0; < parts.length; i++) { // md5 encode each part here replacing value in array } var final = string.join("on chat:", parts); if absolutely must use regex, like:
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)); where md5 function takes string , returns md5 encoded string.
Comments
Post a Comment