2012-09-17 67 views

回答

1

更新:

Regex regex = new Regex(@"@\*(?:[^*]+|\*[^@])*\*@"); 

如果我們使用"[@][*].*[*][@]"那麼接下來會無法正常工作

"@* That was 2 *@ THIS WILL BE DELETED TOO! @* 2. *@" 

至於獎金(?:)用於刪除內部反點。

+0

謝謝Artu .... –

+0

'Multiline'選項沒有任何用處。它所做的只是改變錨點的含義('^'和'$'),而你沒有使用這些錨點。另外,'@'在正則表達式中沒有特別的含義,所以你不需要轉義它。 –

+0

謝謝。現在很漂亮。 – Artru

1

使用正則表達式,如:

string input; // string containing data to be replaced 
Regex regex = new Regex("[@][*].*?[*][@]", RegexOptions.Multiline); 
string replaced = regex.Replace(input, string.Empty); 

這個發現開始@**@結束與一個空字符串替換它們,有效地消除他們的所有字符串。

請注意,這需要將整個文件作爲字符串加載。更好的解決方案可能是創建一個簡單的狀態機,讀取一個流並將其複製到另一個流中,直到找到字符串@*,然後停止複製到另一個字符串,直到找到*@

akton正則表達式
+0

沒有任何星號在要被移除的子字符串內部浮動的問題,例如, '結束; @ *那是2 * 2。* @'? – HABO

+0

@HABO感謝您的取件。答案已更正。 – akton

+0

上面的代碼僅適用於單行。我有一個實例,其中@ *可以出現在第1行,* @可以出現在第n行。我也想刪除中間一行。 –

1

用空字符串替換@\*.*?\*@的所有匹配項。

str = Regex.Replace(str, @"@\*.*?\*@", "", RegexOptions.Singleline);