C# 正则表达式替换不包含特定字符串的所有匹配字
如何使用正则表达式替换不包含特定字符串的匹配字符串 输入字符串 Keepword mywordsecond mywordsecond myfourthwordKeep 要替换的字符串 话 排除字符串 保持 期望输出 我的第二个神话我的第四个神话C# 正则表达式替换不包含特定字符串的所有匹配字,c#,regex,C#,Regex,如何使用正则表达式替换不包含特定字符串的匹配字符串 输入字符串 Keepword mywordsecond mywordsecond myfourthwordKeep 要替换的字符串 话 排除字符串 保持 期望输出 我的第二个神话我的第四个神话 这在记事本++中工作: (?<!Keep)word(?!Keep) (? 它使用“.”如果要删除所有未按“保留”进行的“单词”,则可以使用否定查找后断言: String input=“Keepword mywordsecond mythirdwo
这在记事本++中工作:
(?<!Keep)word(?!Keep)
(?
它使用“.”如果要删除所有未按“保留”进行的“单词”,则可以使用否定查找后断言:
String input=“Keepword mywordsecond mythirdword myfourthwordKeep”;
String pattern=“(?一个单词中是否会有多个单词
?如果有多个,是否要替换所有单词?如果没有,这将为您排序:
Regex r = new Regex(@"\b((?:(?!Keep|word)\w)*)word((?:(?!Keep)\w)*)\b");
s1 = r.Replace(s0, "$1$2");
解释:
首先,\b((?:(?!Keep | word)\w)*
捕获第一次出现word
或Keep
之前的任何文本
它看到的下一个东西必须是word
,如果它看到的是Keep
或字符串的结尾,则匹配尝试立即失败
然后((?:(?!Keep)\w)*)\b
捕获文本的其余部分,以确保其不包含Keep
当面对这样的问题时,大多数用户的第一个冲动是匹配(在消费的意义上)只有他们感兴趣的字符串部分,使用lookarounds来建立上下文。编写正则表达式通常要容易得多,以便它在匹配时始终在字符串中向前移动。您可以捕获要保留的部分,以便通过组引用将它们插回结果字符串中($1
,$2
等)
鉴于您使用的是C 35;
,您可以使用环顾法:
Regex r = new Regex(@"(?<!Keep\w*)word(?!\w*Keep)");
s1 = r.Replace(s0, "");
Regex r=newregex(@“(?string str=“Keepword mywordsecond mythirdword myfourthwordKeep”;
str=Regex.Replace(str,”(?我已经尝试了您的解决方案和hatcyl的解决方案,但是包含“keep”的字符串“word仍然被替换?@matinau我尝试了这个正则表达式,我发现它与您在问题中列出的所需输出相匹配:Keepword mysecond mythird myfourthKeep
。那么这不正确吗?这是我的实际代码,我忘了在原始问题字符串filecontents=File.ReadAllText(File)中包含替换字符串;string pattern=@“(?@matinau上面的代码提供了您所需的输出。我不确定还能为您提供什么帮助。@matinau,请编辑您的问题并将代码添加到其中。我们不能在这样的注释中阅读它。
Regex r = new Regex(@"(?<!Keep\w*)word(?!\w*Keep)");
s1 = r.Replace(s0, "");
string str = "Keepword mywordsecond mythirdword myfourthwordKeep";
str = Regex.Replace(str, "(?<!Keep)word", "");