C#如何对字符串重复取出符合条件的子字符串加密再替换回去

肆年 2017-11-21 11:40:05
比如字符串
string txt = "[文本]:AAAAAAAA[文本]:AAAAAAAA[文本]:AAAAAAAA";

现在要取"]:"和"["之前的字符串进行加密。
加密后的效果
string encrypttxt = "[文本]:BBBBBBB[文本]:BBBBBBB[文本]:BBBBBBB";

那如何正确的重复取出“]:和"["字符串进行加密再替换回去呢?
我自己想到正则,但只能匹配第一个,后面就不知道如何重复匹配替换了。
...全文
195 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
肆年 2017-11-27
  • 打赏
  • 举报
回复
引用 6 楼 xomix 的回复:
[quote=引用 5 楼 qq_25095899 的回复:] 有没有考虑过文本里本来就有[]: 的情况,或者无线嵌套: string txt = "[文[啊啊啊]:本1]:A123456[文[112]:本2]:AA123456[文[[[[111];];];3]:AAA123456";
…………不可能还要兼容这样吧,看他的样例极限就是中间文字不同了吧[/quote] 是的,只是中间的文字不同而已。
xuzuning 2017-11-27
  • 打赏
  • 举报
回复
不要自己为难自己,现成的方法为何不用?
            string txt = "[文本1]:A123456[文本2]:AA123456[文本3]:AAA123456";
var dict = new Dictionary<string, string>();
dict.Add("A123456", "B1B2B3B4");
dict.Add("AA123456", "BBBB1234");
dict.Add("AAA123456", "BBB12345");
var res = Regex.Replace(txt, @"(?<=:)\w+", x=> dict.ContainsKey(x.Value) ? dict[x.Value] : x.Value );
Console.WriteLine(res);
小大飞 2017-11-27
  • 打赏
  • 举报
回复
这种分割真垃圾啊。
  • 打赏
  • 举报
回复
引用 2 楼 u013718767 的回复:
[quote=引用 1 楼 xomix 的回复:] [quote=引用 楼主 u013718767 的回复:] 比如字符串
string txt = "[文本]:AAAAAAAA[文本]:AAAAAAAA[文本]:AAAAAAAA";
现在要取"]:"和"["之前的字符串进行加密。 加密后的效果
string encrypttxt = "[文本]:BBBBBBB[文本]:BBBBBBB[文本]:BBBBBBB";
那如何正确的重复取出“]:和"["字符串进行加密再替换回去呢? 我自己想到正则,但只能匹配第一个,后面就不知道如何重复匹配替换了。
首先利用正则找到 "[文本]:"这个分割字符串 然后
txt.split("[文本]:")
加密完后再使用
txt= string.join(txtlst,"[文本]:")
即可 有些方法不常用,前后顺序大小写可能出错,自己百度补充一下。[/quote] 我上面写的可能写的不清楚.虽然写的都是"AAAAAAA",但每个"[文本]:"之间都不是一样的,所以直接去join这样有问题吧?[/quote] 那你的例子就有问题。 最优做法是先split ]: 获取以下数据:

"[文本"
"BBBBBBB[文本"
"BBBBBBB[文本"
"BBBBBBB";
再split [ 获取以下数据

list1,list2
"","文本"
"BBBBBBB","文本"
"BBBBBBB","文本"
"BBBBBBB","";
这里注意如果有null的时候就转换成"" 然后加密list1,用两个list组合就能完成加密了,注意在空字符串的时候不要加密即可。
肆年 2017-11-21
  • 打赏
  • 举报
回复
准确说是把字符串
string txt = "[文本1]:A123456[文本2]:AA123456[文本3]:AAA123456";
变成
string encrypttxt = "[文本1]:B1B2B3B4[文本2]:BBBB1234[文本3]:BBB12345";
只能拿"]:"和"["取字符串.
肆年 2017-11-21
  • 打赏
  • 举报
回复
引用 1 楼 xomix 的回复:
[quote=引用 楼主 u013718767 的回复:] 比如字符串
string txt = "[文本]:AAAAAAAA[文本]:AAAAAAAA[文本]:AAAAAAAA";
现在要取"]:"和"["之前的字符串进行加密。 加密后的效果
string encrypttxt = "[文本]:BBBBBBB[文本]:BBBBBBB[文本]:BBBBBBB";
那如何正确的重复取出“]:和"["字符串进行加密再替换回去呢? 我自己想到正则,但只能匹配第一个,后面就不知道如何重复匹配替换了。
首先利用正则找到 "[文本]:"这个分割字符串 然后
txt.split("[文本]:")
加密完后再使用
txt= string.join(txtlst,"[文本]:")
即可 有些方法不常用,前后顺序大小写可能出错,自己百度补充一下。[/quote] 我上面写的可能写的不清楚.虽然写的都是"AAAAAAA",但每个"[文本]:"之间都不是一样的,所以直接去join这样有问题吧?
  • 打赏
  • 举报
回复
引用 楼主 u013718767 的回复:
比如字符串
string txt = "[文本]:AAAAAAAA[文本]:AAAAAAAA[文本]:AAAAAAAA";
现在要取"]:"和"["之前的字符串进行加密。 加密后的效果
string encrypttxt = "[文本]:BBBBBBB[文本]:BBBBBBB[文本]:BBBBBBB";
那如何正确的重复取出“]:和"["字符串进行加密再替换回去呢? 我自己想到正则,但只能匹配第一个,后面就不知道如何重复匹配替换了。
首先利用正则找到 "[文本]:"这个分割字符串 然后
txt.split("[文本]:")
加密完后再使用
txt= string.join(txtlst,"[文本]:")
即可 有些方法不常用,前后顺序大小写可能出错,自己百度补充一下。
  • 打赏
  • 举报
回复
引用 5 楼 qq_25095899 的回复:
有没有考虑过文本里本来就有[]: 的情况,或者无线嵌套: string txt = "[文[啊啊啊]:本1]:A123456[文[112]:本2]:AA123456[文[[[[111];];];3]:AAA123456";
…………不可能还要兼容这样吧,看他的样例极限就是中间文字不同了吧
大然然 2017-11-21
  • 打赏
  • 举报
回复
有没有考虑过文本里本来就有[]: 的情况,或者无线嵌套: string txt = "[文[啊啊啊]:本1]:A123456[文[112]:本2]:AA123456[文[[[[111];];];3]:AAA123456";

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧