2012-09-17 31 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);