0

StreamReader を使用して HTML ファイルを読み込んでいます。@*で始まり、で終わる文字列の一部を削除したい*@。複数のオカレンスが存在する可能性があり、それらをすべて削除したいと考えています。

4

3 に答える 3

1

次のような正規表現を使用します。

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

これは、で始まり、@*で終わるすべての文字列を検索*@し、それらを空の文字列に置き換えて、効果的に削除します。

これには、ファイル全体を文字列としてロードする必要があることに注意してください。より良い解決策は、ストリームを読み取り、文字列が見つかるまで別のストリームにコピーし、文字列@*が見つかるまで他の文字列へのコピーを停止する単純なステート マシンを作成する*@ことです。

于 2012-09-17T12:44:27.647 に答える
1

akton正規表現の更新:

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

使用する"[@][*].*[*][@]"と、次は正しく機能しません

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

ボーナス(?: )は内部バックポイントの削除に使用されます。

于 2012-09-17T13:29:24.090 に答える
1

@\*.*?\*@のすべての一致を空の文字列に置き換えます。

str = Regex.Replace(str, @"@\*.*?\*@", "", RegexOptions.Singleline);
于 2012-09-17T13:41:48.620 に答える