【问题标题】:Insert text between 2 delimeters在 2 个分隔符之间插入文本
【发布时间】:2015-06-05 20:16:34
【问题描述】:

我有一个看起来像这样的字符串

Say_Hi~~~Say_Opt1~~Say_Opt3~~~Say_Opt6~~~Say_Opt9~~Say_GoodBye

它有 16 个 '~' 将其分为 17 个“部分”。在第 5 节中,我需要插入 Say_Opt5

Say_Hi~~~Say_Opt1~~Say_Opt3~~Say_Opt5~Say_Opt6~~~Say_Opt9~~Say_GoodBye

所以我需要能够获取一个字符串和一个位置,并将字符串插入指定的位置。我尝试使用正则表达式,但我不确定匹配是如何工作的。

 string baseString = "Say_Hi~~~Say_Opt1~~Say_Opt3~~~Say_Opt6~~~Say_Opt9~~Say_GoodBye";

var newString = new Regex("~").Replace(baseString, "Say_Opt5", 7);

另外,可能已经有选项5了,所以我需要用新的选项5替换旧的选项5。比如替换

Say_Hi~~~Say_Opt1~~Say_Opt3~~Say_Opt5~Say_Opt6~~~Say_Opt9~~Say_GoodBye

Say_Hi~~~Say_Opt1~~Say_Opt3~~Say_Opt5_Custom~Say_Opt6~~~Say_Opt9~~Say_GoodBye

【问题讨论】:

  • 展示你的尝试——全世界都会尝试解决它!
  • 为什么位置 7(从 0 开始)是第 5 节?
  • 如果有option5的话,那就是opt5去的位置。至于为什么,答案总是遗留。

标签: c# regex delimiter


【解决方案1】:
var s1 = "there~is~a~~cat";
var s2 = "super";
var words = s1.Split('~').ToList();
//words.Insert(3, s2); // this will insert new token
words[3] = s2; // this will replace word at specific index
var res = string.Join("~", words.ToArray());

在这之后你的猫会变成超级英雄,它会变成超级猫:)

【讨论】:

  • 对不起,我忘记了最后一部分,这个可以处理吗?
  • ..dur 我。 Ty,漫长的一天。
  • 无需致电.ToArray()String.Join 接受 IEnumerable 作为第二个参数,List 在那里工作得很好。
【解决方案2】:

如果你使用的是 C#,你可以使用这个:

string s = "Say_Hi~~~Say_Opt1~~Say_Opt3~~~Say_Opt6~~~Say_Opt9~~Say_GoodBye";
MessageBox.Show(s);
string[] parts = s.Split('~');
parts[YourIntegerIndex] = "YouNewString";
s = string.Join("~", parts);
MessageBox.Show(s);

【讨论】:

  • 对不起,我忘记了最后一部分,这个可以处理吗?