2013-01-15 110 views
1

我有這樣的字符串,例如:匹配和替換的話

one two three four START four five four five six END seven 

我想搜索其中的單詞「四」與替換,以替換它,這會給

one two three four START REPLACED five REPLACED five six END seven 

我知道START(.*)END會給出之間的單詞和分隔符。 我試過START(?<four>)END,但它什麼也沒給。

我正在使用Vbscript。

回答

5

(?<name>用於命名組。

您需要的是前瞻和後顧斷言,以匹配START.*.*END前後條件,而無需實際匹配它們。

Dim input = "one two three four START four five four five six END seven" 
Dim output = Regex.Replace(input, "(?<=START.*)four(?=.*END)", "test") 

產量:one two three four START test five test five six END seven

+0

非常感謝gregmac,它在應用程序Expresso(測試正則表達式)中效果很好,但是當我在代碼中使用它時,我在正則表達式中出現語法錯誤。如果我從頭開始刪除「<」,它會消除錯誤但會擾亂正則表達式。你有什麼想法,爲什麼它給這個錯誤? – TheBlainer

+0

對不起,顯然vbscript不支持lookbehind斷言。在這種情況下,真的沒有辦法用一個正則表達式來做到這一點,你必須在START和END之間進行子匹配,然後在那裏進行常規替換。你用vbscript卡住了嗎? FWIW,vbscript是[dead](http://en.wikipedia.org/wiki/Vbscript#History),甚至[.NET 1.1支持lookbehind斷言](http://msdn.microsoft.com/en-us/library /bs2twtah(v=vs.71).aspx)。 – gregmac

+0

對於這個項目,我不能切換到c#.Net,因爲更新的版本是用.Net創建的。我必須爲仍在使用它的客戶端維護舊版本。 但我看到,我可以設法做到這一點在JavaScript(我忘了說,這是網絡)。我只需要找到相應的東西。 – TheBlainer

0

你爲什麼要使用正則表達式?

Dim oldStr = "one two three four START four five four five six END seven" 

Dim newStr = oldStr.Replace("four", "REPLACED") 
+1

我不希望所有的「四個一」將被替換,只有這兩個詞之間。 – TheBlainer

+1

這也取代了START之前的四個。 – AutomatedChaos