删除c#中的字符串部分(多次出现)

删除c#中的字符串部分(多次出现),c#,regex,string,C#,Regex,String,我正在使用StreamReader读取HTML文件。 我想删除字符串的一部分,该部分以@*开头,以*@结尾。 可以有多个引用,我想将它们全部删除。使用如下正则表达式: string input; // string containing data to be replaced Regex regex = new Regex("[@][*].*?[*][@]", RegexOptions.Multiline); string replaced = regex.Replace(input, stri

我正在使用StreamReader读取HTML文件。 我想删除字符串的一部分,该部分以
@*
开头,以
*@
结尾。
可以有多个引用,我想将它们全部删除。

使用如下正则表达式:

string input; // string containing data to be replaced
Regex regex = new Regex("[@][*].*?[*][@]", RegexOptions.Multiline);
string replaced = regex.Replace(input, string.Empty);
这将查找以
@*
开头、以
*@
结尾的所有字符串,并将其替换为空字符串,从而有效地删除它们


请注意,这需要将整个文件作为字符串加载。更好的解决方案可能是创建一个简单的状态机,读取一个流并将其复制到另一个流中,直到找到字符串
*
,然后停止复制到另一个字符串,直到找到
*@

使用以下正则表达式:

string input; // string containing data to be replaced
Regex regex = new Regex("[@][*].*?[*][@]", RegexOptions.Multiline);
string replaced = regex.Replace(input, string.Empty);
这将查找以
@*
开头、以
*@
结尾的所有字符串,并将其替换为空字符串,从而有效地删除它们

请注意,这需要将整个文件作为字符串加载。更好的解决方案可能是创建一个简单的状态机,读取一个流并将其复制到另一个流中,直到找到字符串
*
,然后停止复制到另一个字符串,直到找到
*@

akton regex更新:

如果我们使用
“[@][*].[*][@]”
则next将无法正常工作

"@* That was 2 *@  THIS WILL BE DELETED TOO!  @* 2. *@"
作为奖金,
(?:)
用于删除内部背景点。

akton regex的更新:

如果我们使用
“[@][*].[*][@]”
则next将无法正常工作

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

作为奖金,
(?:)
用于删除内部背景点。

用空字符串替换所有匹配的
@\*.\*@

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

用空字符串替换所有匹配的
@\*.\*@

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

在要删除的子字符串中是否有任何星号浮动的问题,例如,
end;@*那是2*2*@?上述代码仅适用于单线。我有一个例子,@*可以出现在第1行,*@可以出现在第n行。“我还想删除中间的a行。@Devhsalian答案已更新。”。我将RegexOptions.Multiline参数添加到构造函数中。请更新您的regex,Salian应将其检查为answered@Artu谢谢你再接我一次。我改为使用懒惰而不是贪婪版本的
*
,这应该具有相同的效果。这难道没有问题吗?要删除的子字符串中有任何星号浮动,例如
end;@*那是2*2*@?上述代码仅适用于单线。我有一个例子,@*可以出现在第1行,*@可以出现在第n行。“我还想删除中间的a行。@Devhsalian答案已更新。”。我将RegexOptions.Multiline参数添加到构造函数中。请更新您的regex,Salian应将其检查为answered@Artu谢谢你再接我一次。我改为使用懒惰而不是贪婪版本的
*
,这应该具有相同的效果。
多行
选项没有任何用处。它所做的只是更改锚的含义(
^
$
),而您没有使用这些锚。另外,
@
在正则表达式中没有特殊意义,因此不需要对其进行转义。
多行
选项没有任何用处。它所做的只是更改锚的含义(
^
$
),而您没有使用这些锚。而且,
@
在正则表达式中没有特殊意义,所以您不需要转义它。