[英]Regex group string replace c#
The target string is "qwer on chat: qwer chat"
. 目标字符串是"qwer on chat: qwer chat"
。 I want to replace qwer .. etc
to encoded text (md5) // that already have. 我想将qwer .. etc
替换为已存在的编码文本(md5)//。 But I don't want to replace "on chat:"
to text encoding , while the word "chat" is to be encoded. 但是我不想将"on chat:"
替换为文本编码,而对“聊天”一词进行了编码。 The expected result is "{md5}{md5}{md5}{md5} on chat: {md5}{md5}{md5}{md5} {md5}{md5}{md5}{md5}"
. 预期结果是"{md5}{md5}{md5}{md5} on chat: {md5}{md5}{md5}{md5} {md5}{md5}{md5}{md5}"
。 How can I do this in C#? 如何在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, you can just use String.Split
and String.Join
: 无需正则表达式,只需使用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);
if you absolutely must use a regex, you could do something 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
is a function that takes a string and returns the md5 encoded string. 其中md5
是接受字符串并返回md5编码字符串的函数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.