【问题标题】:How to replace string with consecutive instances?如何用连续实例替换字符串?
【发布时间】:2014-05-12 06:59:21
【问题描述】:

编辑

@Ulugbek - 我已编辑问题以澄清。

我使用模式作为分隔符,需要通过使用 C# 在模式之间插入 $ 来替换连续出现的模式,但目前它只替换模式的第一个实例。

除了运行几次替换之外,我还需要做些什么吗?或者,我需要使用正则表达式吗?

谢谢

String s = "ABCThis is a delimited valueABCABCABCAnd another delimited valueABC";
String.Replace("ABCABC", "ABC$ABC"); //misses second instance of the consecutive patterns instances 

结果:

ABC这是一个定界值ABC$ABCABC和另一个定界值ABC

期望的结果:

ABC这是一个定界值ABC$ABC$ABC和另一个定界值ABC

乌鲁别克解决方案:

ABC$这是一个定界值ABC$ABC$ABC$和另一个定界值 价值ABC$

谢谢

【问题讨论】:

  • 循环调用 Replace 直到结果不再变化?
  • 如果你统计你的模式的实例,结果是2,那么为什么想要的结果不是ABC$ABCABC$ABC

标签: c# regex replace


【解决方案1】:

您可以重新考虑策略。将所有ABCs 后跟ABC 替换为ABC$

string s = "ABCABCABC";
string output = Regex.Replace(s, "ABC(?=ABC)", "ABC$");

【讨论】:

  • @user2732180 您能否提供更多详细信息,为什么它不起作用?
  • @user2732180 几乎看不到我的代码是如何生成的:ABC$This is a delimited valueABC$ABC$ABC$And another delimited valueABC$?你试过执行吗?
  • 遵循同样的想法:Regex.Replace(s, "(?<=ABC)(?=ABC)", "$");
  • @PauloMorgado 是的,这是有道理的。但不知何故,即使没有后视的正则表达式也不适用于 OP。
  • @PauloMorgado - 您的解决方案也适用。然而,在对源文件尝试两种解决方案后,平均执行时间为 23.5 秒,而 Ulugbek 的解决方案平均为 21 秒。所以,我给他加分。非常感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 2013-03-31
  • 2021-03-13
  • 1970-01-01
  • 2020-07-19
  • 1970-01-01
  • 1970-01-01
  • 2016-03-24
  • 1970-01-01
相关资源
最近更新 更多