似乎.NET Regex.Replace方法自动替换所有匹配的事件.我可以提供一个MatchEvaluator委托,它在第一次替换后返回匹配的字符串,不会发生任何变化,但这对我来说效率非常低.
第一次更换后停止的最有效方法是什么?
使用C#,我有一个字符串,它是一个包含多个查询的SQL脚本.我想删除用单引号括起来的字符串部分.我可以这样使用Regex.Replace:
string test = "Only 'together' can we turn him to the 'dark side' of the Force";
test = Regex.Replace(test, "'[^']*'", string.Empty);
结果:"我们只能把他变成原力"
我想要做的是删除引号之间的子串EXCEPT包含特定子串的子串.例如,使用上面的字符串,我想删除引用的子字符串,除了那些包含"dark"的子字符串,这样生成的字符串是:
结果:"我们只能把他变成原力的'黑暗面'"
如何使用Regex.Replace或者通过其他技术来实现?目前,我想要的是涉及使用的解决方案Substring(),IndexOf()以及Contains().
注意:我不在乎是否删除了"黑暗面"周围的单引号,结果也可能是:"我们只能将他转向原力的黑暗面." 我这样说是因为使用的解决方案Split()会删除所有单引号.
编辑:我没有尚未使用的解决方案Substring(),IndexOf()等等.通过"工作,"我的意思是我想在我的头上怎么可以做到这一点.我没有代码,这就是为什么我还没有发布任何代码.谢谢.
编辑:下面的VKS解决方案有效.我没有逃脱\ b第一次尝试,这就是它失败的原因.此外,除非我在整个字符串中包含单引号,否则它不起作用.
test = Regex.Replace(test, "'(?![^']*\\bdark\\b)[^']*'", string.Empty);