c# - 如何仅从字符串中删除某些子字符串?

标签 c# regex string

使用 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() 的解决方案。

注意:我不在乎“dark side”周围的单引号是否被删除,所以结果也可能是:“Only can we turn him to the dark side of the Force.”我这样说是因为使用 Split() 的解决方案会删除所有单引号。

编辑: 我还没有使用 Substring()IndexOf() 等的解决方案。通过“致力于, “我的意思是我在脑海中思考如何做到这一点。我没有代码,这就是为什么我还没有发布任何代码。谢谢。

编辑: VKS 的以下解决方案有效。我没有逃避\b 的第一次尝试,这就是它失败的原因。此外,除非我在整个字符串周围加上单引号,否则它也不起作用。

test = Regex.Replace(test, "'(?![^']*\\bdark\\b)[^']*'", string.Empty);

最佳答案

'(?![^']*\bdark\b)[^']*'

试试这个。查看演示。替换为空字符串。您可以在此处使用lookahead来检查''是否包含单词黑暗

https://www.regex101.com/r/rG7gX4/12

关于c# - 如何仅从字符串中删除某些子字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28105661/

相关文章:

regex - 替换参数,删除不应该删除的空格

文件上传中的javascript正则表达式和文件类型

java - Apache 的 StringUtils.isBlank(str) 与 Guava 的 Strings.isNullOrEmpty(str) : Should you routinely check for whitespace?

c# - WPF 图像处理

c# - 基于事件与轮询组件

c# - 正则表达式:C# 提取双引号内的文本

java - 在Java中如何将字符串转换为整数?

c# - 包含的有效搜索

c# - 读取大量字符并更新文本框

c# - Core 2.0 Restsharp 使用 System.Runtime.Serialization.Formatters 构建警告