【发布时间】:2015-01-23 08:18:30
【问题描述】:
使用 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);
结果:“我们只能把他变成原力”
我想要做的是删除引号之间的子字符串,除了包含特定子字符串的子字符串。例如,使用上面的字符串,我想删除带引号的子字符串,除了那些包含“dark”的子字符串,这样生成的字符串是:
结果:“只有我们才能把他变成原力的‘黑暗面’”
如何使用Regex.Replace 或通过其他技术来实现?我目前正在尝试使用Substring()、IndexOf() 和Contains() 的解决方案。
注意:我不在乎“黑暗面”周围的单引号是否被删除,所以结果也可能是:“我们只能把他变成原力的黑暗面。”我这样说是因为使用 Split() 的解决方案会删除所有单引号。
编辑:我还没有使用Substring()、IndexOf() 等的解决方案。通过“工作”,我的意思是我在脑海中思考这怎么可能完毕。我没有代码,这就是为什么我还没有发布任何代码。谢谢。
编辑:以下 VKS 的解决方案有效。我没有逃避 \b 第一次尝试,这就是它失败的原因。此外,除非我在整个字符串周围加上单引号,否则它也不起作用。
test = Regex.Replace(test, "'(?![^']*\\bdark\\b)[^']*'", string.Empty);
【问题讨论】:
-
@AndyKorneyev 是什么让您认为这不是在这里提问的好方法?这是我一段时间以来看到的最完整的第一篇文章。有一个很好的尝试,使用正则表达式,问题很清楚,有一些想法,我真的不知道这怎么可能更好,更不用说包括实际答案了。
-
@AndyKorneyev Op 的两行代码显示了他的努力,不是吗?此外,这个问题写得很好,显示出非常好的研究工作。
-
@AndyKorneyev 如果 op 知道 OP 想要什么,为什么他应该首先出现在这里?好的。该代码未在此处显示;我同意,OP应该发布它。但是你的意思是什么这不是在这里提出问题的好方法。到目前为止,您是否尝试过任何方法来解决您的问题? 嗯?您复制粘贴的通用模板似乎根本不适合这个问题。
-
@AndyKorneyev 我不明白为什么我的帖子不是在这里提问的好方法,你能详细说明为什么吗?我使用 Regex.Replace 尝试了很多事情,但我要么删除了所有分隔的子字符串,要么删除了第一个分隔符之后的字符串的其余部分,或者没有更改。我包括了最接近我想要的结果,这是我在这个问题上的努力。我不知道如何解决这个问题,这就是我在这个网站上寻求建议的原因。感谢您的帮助。
-
在 SQL 中查找单引号通常表明您做错了:参数化是解决该问题的方法。