2011-11-21 46 views
1

我有一個字符串像定界符,字符串替換文本與使用正則表達式

string str = "(50%silicon +20%!(20%Gold + 80%Silver)| + 30%Alumnium)"; 

我需要這將在更換之間的內容的正則表達式!和|用空字符串。結果應該是(50%silicon +20% + 30%Alumnium)

如果字符串中包含類似的信息(包含嵌套的分隔符):

string str = "(50%silicon +20%!(80%Gold + 80%Silver + 20%!(20%Iron + 80%Silver)|)| 
       + 30%Alumnium)"; 

結果應該是(50%silicon +20% + 30%Alumnium) - 忽略嵌套的分隔符。

我試過以下的正則表達式,但它不會忽略嵌套:

Regex.Replace(str , @"!.+?\|", "", RegexOptions.IgnoreCase); 
+0

你應該真正發揮作用的你的解釋和問題的格式。 – alexn

+0

你已經試過了什麼? – ilivewithian

+0

當然,我會努力處理你提到的事情。 Alex我嘗試了下面給出的方法,Regex.Replace(str,@「!。+?\ |」,「」,RegexOptions.IgnoreCase);當嵌套的delimeters出現時,問題就來了。嵌套的delimeters應該被忽略。 – Shah

回答

5

您正在使用惰性量詞+?,它將查找與您的正則表達式匹配的最小可能子字符串。爲了得到你正在尋找的結果,你想使用貪婪量詞+,它將匹配可能的最大子字符串。

下面的正則表達式(在C#中沒有經過測試,因爲我沒有做它用,但這應該對任何標準的正則表達式執行工作)會做你想要什麼:

'!.+\|'

2
using System.Text.RegularExpressions; 

str = Regex.Replace(str , @"!.+?\|", "", RegexOptions.IgnoreCase); 
+0

它正在工作。第一部分但在第二部分失敗。 – Shah

+0

當然,我會在你提到的事情上工作。 Alex我嘗試了下面給出的方法,Regex.Replace(str,@「!。+?\ |」,「」,RegexOptions.IgnoreCase);但問題出現在有嵌套的delimeters時。嵌套的分隔符應該被忽略。 – Shah

0
Regex.Replace(str, @"!.+?\||\)\|", "", RegexOptions.IgnoreCase); 

同時適用於提供字符串。我擴展了正則表達式,第二次檢查「)/」以替換剩餘的字符。