C# 如果某个单词没有';我以前没有具体的计划

C# 如果某个单词没有';我以前没有具体的计划,c#,regex,regex-lookarounds,C#,Regex,Regex Lookarounds,在C#中使用正则表达式,如果之前没有特定的单词,我应该替换一个单词 在我的例子中,用“Steve Ballmer”替换“Ballmer”是很有必要的 在: 结果: ...text...Steve Ballmer...text ...text...Steve Ballmer...text 但是如果“史蒂夫”已经出现了,我不应该再加上史蒂夫 在: 结果: ...text...Steve Ballmer...text ...text...Steve Ballmer...text 谢谢。在匹配鲍

在C#中使用正则表达式,如果之前没有特定的单词,我应该替换一个单词 在我的例子中,用“Steve Ballmer”替换“Ballmer”是很有必要的

在:

结果:

...text...Steve Ballmer...text
...text...Steve Ballmer...text
但是如果“史蒂夫”已经出现了,我不应该再加上史蒂夫

在:

结果:

...text...Steve Ballmer...text
...text...Steve Ballmer...text
谢谢。

在匹配
鲍尔默时使用:

string result = Regex.Replace(input, @"(?<!Steve )Ballmer", "Steve Ballmer");

string result=Regex.Replace(输入,@“(?使用负向后看
(?)和正向前看
(?=…)


string output=Regex.Replace(input,@)(?正则表达式很有趣,但是在使用大型工具之前,尝试更简单的工具也是值得的。这个特殊的问题可以通过基本的查找和替换来解决

  • 将“鲍尔默”替换为“史蒂夫·鲍尔默”
  • 将“Steve Ballmer”替换为“Steve Ballmer”(纠正任何过度表达)

  • 或者

  • 将“Steve Ballmer”替换为“Ballmer”
  • 将“鲍尔默”替换为“史蒂夫·鲍尔默”

  • 比如说,使用零宽度匹配只是一个品味问题,还是它确实有任何好处(性能或其他方面),因为这似乎是我们的解决方案之间的差异:D.@m.buettner-我认为删除然后插入已存在的单词的解决方案没有任何积极意义,就像您使用
    Ballmer
    word一样。此外,您没有在原始答案中提供替换代码,因为您后来根据我的答案添加了它:)@m、 就buettner的表现而言,差异可能微不足道。但至少你可以避免重复一个单词或短语(在本例中为“Ballmer”)。并且Ωmega,改进答案有什么错?:-)答案是可编辑的,因为改进(即使是陌生人)是受鼓励的。@Wiseguy-一点问题都没有,我只是指出了不同之处,我的评论以:)@OΩmega,是的,我不想质疑你的答案的合法性,因为它肯定比我的答案更好。我只是想知道除了删除不必要的重复之外,是否还有其他原因。我只是通常不在我的答案中包含这样的内容,因为这会让仍然在g上的OPs更难理解带有regex basics的RIP(与将
    ?:
    放入每个nevessary子组的可论证的微优化相同,不需要捕获)
    string output = Regex.Replace(input, @"(?<!Steve )(?=Ballmer)", "Steve ");