2012-10-29 64 views
2

在C#中使用正則表達式我應該替換一個詞,如果它之前沒有特定的一個 在我的例子中它用「史蒂夫鮑爾默」取代「鮑爾默」正則表達式替換一個詞,如果它沒有特定的前

在:

...text...Ballmer...text 

結果:

...text...Steve Ballmer...text 

但如果 「史蒂夫」 已經存在,我不應該再添加史蒂夫。

在:

...text...Steve Ballmer...text 

結果:

...text...Steve Ballmer...text 

感謝。

回答

4

使用負回顧後(?<!...)和積極的前瞻(?=...)

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

說,它只是一個品味的問題使用零寬度匹配或者它實際上有任何好處(性能或其他方式),因爲這似乎是通常我們的解決方案之間的差異:D。 –

+0

@ m.buettner - 我看到的解決方案沒有任何好處,可以刪除並插入已存在的單詞,就像使用「Ballmer」單詞一樣。除此之外,您沒有在原始答案中提供替換代碼,因爲您稍後根據我的回答添加了它。) –

+0

@ m.buettner從性能上看,差異可能可以忽略不計。但至少你可以避免重複一個單詞或短語(在本例中爲「鮑爾默」)。而歐米茄,改善自己的答案有什麼問題? :-)答案是可編輯的原因,因爲改進(即使是由陌生人)是鼓勵。 – Wiseguy

2

配套使用Ballmernegative lookbehind

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

這將不正是你想要的。匹配之前沒有加入Steve(和一個空格)的任何Ballmer

0

正則表達式的樂趣,但它也是值得訴諸大槍之前嘗試簡單的工具。這種特殊的問題可以基本得到解決查找和替換

  1. 替換「鮑爾默」與「史蒂夫鮑爾默」
  2. 與「史蒂夫鮑爾默」替換「史蒂夫史蒂夫·鮑爾默」(目的是糾正任何oversteving)

或者

  1. 與 「鮑爾默」 替換 「史蒂夫鮑爾默」
  2. 替換「鮑爾默」與「史蒂夫鮑爾默」
相關問題