2010-01-14 42 views
1

有沒有一種方法,正則表達式將檢查第一個和最後一個字符,但將只替換IV而不是空格。在正則表達式中需要幫助替換C#

Regex.Replace("This is IV item.", "[^A-Za-z0-9](IV)[^A-Za-z0-9]", "fourth"); 

請不要告訴我MatchEvaluator和其他基於比賽的事情,我需要一個在線解決方案,以及一條線並不意味着組合代碼,這意味着只用替換法。

而且我不是說只有空間,我一般談論任何字符,如:(

再次,讓我清楚,我不是在尋找比,將符合一些正則表達式的符號之外的任何東西該字符,但不會取代它,而不是這種方法:

Regex.Replace("This is IV item.", "([^A-Za-z0-9])(IV)([^A-Za-z0-9])", "$1fourth$3"); 

,因爲這正則表達式是參數,並自動將自動使用$ 1某些事情的一些代碼,我不想改變代碼,所以是有一種方法,使$ 1只會是IV,同時檢查前一個字符。

+0

如果我可以這麼着地問,爲什麼你需要一個單線? – Rory 2010-01-14 17:09:27

+0

已經告訴正則表達式替換是在一些其他的庫,我不想修改。正則表達式就是對此的輸入。所以問題是關於編寫正則表達式而不是C#代碼。 – 2010-01-14 17:13:34

回答

2

這不完全是從你的問題清楚你想要什麼,以接受和拒絕,但我認爲你需要的是這樣的:

Regex.Replace("This is IV item.", "(?<=[^A-Za-z0-9])(IV)(?=[^A-Za-z0-9])", "fourth"); 
+0

是的,這是我想要的。 – 2010-01-14 17:24:32

2

你在找什麼都叫做的背後展望未來。 嘗試使用(?<=\)IV(?!<=\)作爲模式。

+0

+1正如我所看到的。對不起,不接受這個原因,我遇到了給定的語法問題,所以接受了這個例子。 – 2010-01-14 17:27:36

+0

我想你的意思是'(?<= \)IV(?= \)'。無論如何,OP說周圍的角色可能不是ASCII字母和數字,而不僅僅是空格。 – 2010-01-14 21:19:36

5
Regex.Replace("This is IV item.", @"\bIV\b", "fourth"); 
+0

「這是!IV項目」。我說它可以是任何符號。 – 2010-01-14 17:25:27

+0

這適用於「This is!IV item」。它失敗了「這是\ _IV \ _項目,儘管」。 – 2010-01-14 17:30:17

+0

字邊界(\ b)方法非常簡單,並且經常是您所需要的。如果這還不夠,那麼你應該使用後視/前瞻解決方案。 – 2010-01-14 17:48:19